1

好的,我的问题来了。我有一个程序可以告诉我传感器的值,该程序在终端中运行,输出如下所示:

110

362

492

655

依此类推....以每秒 4 行(状态)的速率无限期地进行。然后我需要在我的目标 c 程序的级别栏中实时显示这些值。我尝试使用此代码从 Cocoa 应用程序执行终端命令,这基本上是使用 nstask 和管道。我意识到程序在到达 data = [file readDataToEndOfFile]; 时卡住了。我认为是因为当这永远不会结束时正在等待完成程序或输出。那么,有没有办法实时逐行获取这个传感器的状态呢?

这是我的代码,由于相同的无穷输出和相似的速率,我只是更改了 ping google.com 的命令。

- (void) epocSender
{
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/sbin/ping"];
NSArray *arguments;arguments = [NSArray arrayWithObjects: @"google.com", nil];
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedData:) name:NSFileHandleDataAvailableNotification object:file];
[file waitForDataInBackgroundAndNotify];
}

- (void)receivedData:(NSNotification *)notif {
    NSLog(@"notification received");
}
4

1 回答 1

2

从您的管道中获取NSFileHandle用于读取的信息并用于waitForDataInBackgroundAndNotify接收新数据的通知。每次收到通知时,请waitForDataInBackgroundAndNotify再次致电重新注册。

于 2013-10-19T22:25:53.560 回答