可以在performSelector waitsUntilDone时取消线程吗?
如下所示:
我有一个while循环,其中包含以下代码行:
[self performSelector:@selector(getMyRecords:) onThread:myThread withObject:i waitUntilDone:YES]有时,当我的循环执行时,我需要取消线程myThread。我得到了以下崩溃问题:
Terminating app due to uncaught exception 'NSDestinationInvalidException', reason: '*** -[MyController performSelector:onThread:withObject:waitUntilDone:modes:]: target thread exited while waiting for the perform'发布于 2011-03-16 19:36:31
查看NSObject的文档:
此方法使用默认的运行循环模式(即,与NSRunLoopCommonModes常量关联的模式)在目标线程的运行循环上对消息进行排队。作为其正常运行循环处理的一部分,目标线程将消息出队(假设它正在以默认运行循环模式之一运行),并调用所需的方法。
您不能取消使用此方法排队的消息。如果您需要取消当前线程上的消息的选项,则必须使用performSelector:withObject:afterDelay:或performSelector:withObject:afterDelay:inModes:方法。
此方法将保留接收器和arg参数,直到执行选择器之后。
发布于 2011-03-16 19:27:05
如果你在一个线程中有一个长时间运行的操作,你可以声明一个条件变量(原子),就像‘取消’,并检查它。类似于:
- (void) threadFunc {
while (!canceled){
// do stuff
}
}
- (void) cancelThread {
canceled = true;
}发布于 2011-03-16 19:33:18
我认为最简单的方法是使用NSThread's -(void)cancel方法。
https://stackoverflow.com/questions/5324526
复制相似问题