waitForDataInBackgroundAndNotify
を使用して、ココアのNSTask
の標準エラーからデータを読み取ろうとしています。次のコードはストリームを読み込むため、すでに部分的に動作しています。NSFileHandleDataAvailableNotificationファイルが新しいデータなしで繰り返されます(CPU使用率が非常に高くなります)
私が持っている問題は、時々、すべての([data length]
戻り0
)で新しいデータで繰り返し(毎秒何千回を)発射NSFileHandleDataAvailableNotification
開始。私のプロセスでは、CPUの使用量が多くなり、マシンが停止するまで遅くなります。あなたの人の誰かが以前これのようなものを過去に打ったことがありますか?前もって感謝します。
/**
* Start reading from STDERR
*
* @private
*/
- (void)startReadingStandardError {
NSFileHandle *fileHandle = [_task.standardError fileHandleForReading];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(errorData:)
name:NSFileHandleDataAvailableNotification
object:fileHandle];
[fileHandle waitForDataInBackgroundAndNotify];
}
/**
* Fired whenever new data becomes available on STDERR
*
* @private
*/
-(void) errorData: (NSNotification *) notification
{
NSFileHandle *fileHandle = (NSFileHandle*) [notification object];
NSData *data = [fileHandle availableData];
if ([data length]) {
// consume data
}
[fileHandle waitForDataInBackgroundAndNotify];
}
また、ファイルを閉じる必要があります。 –
通知が届いた後、再び 'waitForDataInBackgroundAndNotify'を呼び出さなければならないということは、どこにもどこにも書かれていません。ありがとう! –