異なるスレッド優先度と同時にバックグラウンドで実行する必要がある2つのタスクがあります。
ジャイロモーションデータを継続的に収集して処理します(優先度が高い)
gyroQueue = [[NSOperationQueue alloc] init]; [self.motionManager startDeviceMotionUpdatesToQueue:gyroQueue withHandler:^(CMDeviceMotion *motion, NSError *error){ [self processMotion:motion withError:error]; }];
モーションの更新(変換、トリミング、サイズ変更など= 1〜2秒)に干渉することなく画像を処理する場合があります(優先度が非常に低い)
imageProcessingQueue = [[NSOperationQueue alloc] init]; [imageProcessingQueue addOperationWithBlock:^{ [self processImage:[UIImage imageWithData:imageData]]; }];
編集:これは私が最初に(ブロック操作の代わりに)配置していたものであり、それでもモーションの更新をブロックしています:
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(processImage:) object:[UIImage imageWithData:imageData]];
[operation setThreadPriority:0.0];
[operation setQueuePriority:0.0];
[imageProcessingQueue addOperation:operation];
これらのタスクは両方とも同じバックグラウンドスレッドで実行されているようで(NSOperationQueueの性質のため?)、画像の処理は、完了するまでgyroQueueの更新をブロックします。これは私が避けようとしていることです。
NSOperationQueueを使用して2つの別々のスレッドを生成し、それに応じてveryHighとveryLowの優先度を割り当てるにはどうすればよいですか?
編集:この質問はまだ開いています、私は画像のサイズ変更のためにトラバーハーモンの画像サイズ変更機能を使用しています。誰かがそれがスレッドセーフかどうかを確認できますか?