Tôi đang sử dụng NSTask, nhưng khi tôi khởi chạy tác vụ, nó chặn luồng chính (vì vậy tôi không thể cập nhật nó) cho đến khi tác vụ kết thúc. Đây là mã của tôi:NSTask chặn chủ đề chính
NSString *hostsforping = @"google.es";
pingdata = [[NSTask alloc] init];
[pingdata setLaunchPath: @"/sbin/ping"];
NSArray *pingargs;
pingargs = [NSArray arrayWithObjects: @"-c 5", hostsforping, nil];
[pingdata setArguments: pingargs];
NSPipe *pingpipe;
pingpipe = [NSPipe pipe];
[pingdata setStandardOutput: pingpipe];
NSFileHandle *pingfile;
pingfile = [pingpipe fileHandleForReading];
[pingdata launch];
NSData *pingdata1;
pingdata1 = [pingfile readDataToEndOfFile];
NSString *pingstring;
pingstring = [[NSString alloc] initWithData: pingdata1 encoding: NSUTF8StringEncoding];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(taskDidTerminate:)
name:NSTaskDidTerminateNotification
object:nil];
}
- (void) taskDidTerminate:(NSNotification *)notification {
NSLog(@"end");
}
Tôi đã đọc rằng -waitUntilExit
không chặn các chủ đề chính, nhưng tôi không sử dụng nó, vì vậy tôi không biết những gì tôi đang làm sai.
Hoặc, sử dụng khả năng đọcHandler được thực thi tự động, khi tác vụ của bạn được đáp ứng dữ liệu. một cái gì đó được viết trong đường ống. –