在我的案例中杀掉另一个主题

时间:2016-10-12 13:52:14

标签: ios objective-c nsthread

我在另一个线程中运行函数doTask,如下所示:

NSThread *otherThread = [[NSThread alloc] initWithTarget:self
                                                selector:@selector(doTask)
                                                  object:nil];
[otherThread start];

...
-(void)doTask{
   ...
}

从当前线程中删除otherThread的正确方法是什么?

我知道[otherThread cancel]只会标记otherThread应该被杀死但不会真正杀死它。

2 个答案:

答案 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],或者停止线程当前正在运行的其他耗时的操作。如果你正确清理并调用取消它应该杀死线程。