NSPipe不会返回所有数据

时间:2015-02-04 22:11:48

标签: macos ipc nspipe

我很长时间都在努力解决这个问题。

我正在使用NSPipe与其他程序进行通信,一切正常,除非我收到通知NSFileHandleDataAvailableNotification,否则我无法获得所有数据。

到目前为止,我发现管道的读取部分确实收到数据可用的通知,但它还没有完全完成(写入)。如果我在通知后立即阅读,我只会得到部分回复。但是如果我将线程设置为休眠例如0.1秒然后读取,则一切正常。

有没有办法确定,我会从管道得到完整的回复?

到目前为止,我有:

inputPipe = [NSPipe pipe];
outputPipe = [NSPipe pipe];
fileReading = inputPipe.fileHandleForReading;
[fileReading waitForDataInBackgroundAndNotify];
fileWriting = outputPipe.fileHandleForWriting;

task = [NSTask new];
task.launchPath = ... launch path
task.arguments = @[@"arg1"];
task.standardInput = outputPipe;
task.standardOutput = inputPipe;
[task launch];

当然会设置通知观察员。它的选择器是:

- (void) dataAvailabe:(NSNotification *) notification {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    [NSThread sleepForTimeInterval:0.1];
    dispatch_async(dispatch_get_main_queue(), ^{
        NSData *data = [fileReading availableData];
        NSString * reply = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    });
});

0 个答案:

没有答案