我在另一个线程中运行函数doTask
,如下所示:
NSThread *otherThread = [[NSThread alloc] initWithTarget:self
selector:@selector(doTask)
object:nil];
[otherThread start];
...
-(void)doTask{
...
}
从当前线程中删除otherThread
的正确方法是什么?
我知道[otherThread cancel]
只会标记otherThread
应该被杀死但不会真正杀死它。
答案 0 :(得分:0)
doTask
需要定期检查一些状态以确定是否需要提前终止。一个简单的BOOL就足够了。
@interface MyTask:NSObject
@property(atomic) BOOL keepGoing;
@end
@implementation MyTask
- (void) calculate
{
while(_keepGoing && _workQueueHasStuff) {
.... process some stuff ....
}
if (!_keepGoing) {
... early termination ...
} else {
... work queue depleted ...
}
}
或者,正如S.S所说,按预期使用isCancelled/-cancel
API
你不能直接从线程外部杀死一个线程。
答案 1 :(得分:-1)
您可以在使计时器无效之后调用[otherThread cancel]
,或者停止线程当前正在运行的其他耗时的操作。如果你正确清理并调用取消它应该杀死线程。