我在主线程中使用NSThread创建了一个子线程
NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(MyThread:) object:timer];
5秒后,我在主线程中使用[newThread cancel]来停止子线程,但它没有用,
方法MyThread:在newThread中仍在工作
所以,有什么正确的答案来停止newThread,THX
实际上[newThread isCancelled]是YES,但是选择器MyThread仍在进行中
答案 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