我有一个作为NSThread运行的多播接收守护进程。当它等待接收时,我希望能够取消它,而不用等待另一个可能不会来的包。由于它只是等待,我不能执行其他代码来检查isCancelled。我怎样才能做到这一点?如何在线程正在等待接收数据包时取消NSThread?
这里是正在接收的代码。它坐在那里,直到包是在第一行等待
/* block waiting to receive a packet */
if ((recv_len = recvfrom(sock, recv_str, MAX_LEN, 0,
(struct sockaddr*)&from_addr, &from_len)) < 0) {
[delegate multicastDaemonDidFinish:self withError:@"recvfrom() failed"];
exit(1);
}
receivedString = [NSString stringWithFormat:@"%s", recv_str];
[delegate multicastDaemonDidReceiveData:self receivedString:receivedString];
在父,谁也委托,此主题被称为:
[daemonThread initWithTarget:multicastDaemon selector:@selector(doWorkWithDelegate:) object:self];
[daemonThread start];
我可以发出[daemonThread取消],但daemonThread在他等待时不会检查isCancelled。我怎样才能做到这一点?
选择将解决我的问题。我还没有取消工作,但我确实已经选择了工作,并且很快就能取消工作。谢谢! – Adam