如何在iphone中停止NSThread子线程

时间:2010-07-07 01:41:37

标签: iphone objective-c nsthread

我在主线程中使用NSThread创建了一个子线程

NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(MyThread:) object:timer];

5秒后,我在主线程中使用[newThread cancel]来停止子线程,但它没有用,

方法MyThread:在newThread中仍在工作

所以,有什么正确的答案来停止newThread,THX

实际上[newThread isCancelled]是YES,但是选择器MyThread仍在进行中

2 个答案:

答案 0 :(得分:10)

cancel方法仅通知线程它被取消(正如您所提到的那样将isCancelled更改为YES。然后线程本身有责任检查并退出。例如,在您的MyThread:方法中,您可以执行此操作:

// At some checkpoint
if([[NSThread currentThread] isCancelled]) {
    /* do some clean up here */
    [NSThread exit];
}

你应该定期检查,并从线程中退出,如图所示;否则cancel没有任何影响。

答案 1 :(得分:1)

- (无效)取消

讨论 此方法的语义与用于NSOperation对象的语义相同。此方法在接收器中设置状态信息,然后由isCancelled方法反映。 支持取消的线程应定期调用isCancelled方法来确定线程是否实际上已被取消,如果已经取消则退出。

更多信息请参阅NSThread API Reference