NSTask
を使用して Cocoaの a の標準エラーからデータを読み込もうとしていますwaitForDataInBackgroundAndNotify
。次のコードはストリームを読み取るため、すでに部分的に機能しています。
私が抱えている問題は、新しいデータがまったくない状態で (毎秒数千回) が繰り返し発火し始めることがあることです( return NSFileHandleDataAvailableNotification
) 。その後、プロセスが大量の CPU を使用し始め、マシンの速度が低下して停止します。過去にこのようなことをしたことがある人はいますか?前もって感謝します。[data length]
0
/**
* 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];
}