このコードに問題があります。基本的に、タイマー関数から fwrite を非同期で実行したいと考えています。
ここに私の Timer 関数のコード ブロックがあります。(これは 0.2 秒ごとにタイマーによって呼び出されます。
-(void)timerFunction
{
WriteFileOperation * operation =
[WriteFileOperation writeFileWithBuffer:pFile buffer:readblePixels length:nBytes*15];
[_queue addOperation:operation]; // Here it is waiting to complete the fwrite
}
WrtiteFilerOperation は、渡すバッファをファイルに書き込む必要がある NSoperation クラスです。このコードを WriteFileOperation の「開始」メソッドに追加しました。
- (void)start
{
if (![NSThread isMainThread])
{
[self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
return;
}
[self willChangeValueForKey:@"isExecuting"];
_isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
NSLog(@"write bytes %d",fwrite(_buffer, 1, _nBytes, _file));
free(_buffer);
[self finish];
}
ここでの問題は、バッファーをファイルに書き込むまで NSOperation によってブロックされた timerFunction です (開始メソッドが実行を終了するまでブロックされることを意味します)。
startメソッドの実行が完了するのを待たずにtimerFunctionに戻りたいです。
ここで何が間違っていますか?
前もって感謝します
ラグー