如何退出NSThread

时间:2009-05-26 07:02:39

标签: iphone objective-c ios nsthread

我正在使用这样的线程,

[NSThread detachNewThreadSelector:@selector(myfunction) toTarget:self withObject

线程正常运行,我想退出中间的线程,我该怎么办呢。如果我使用[NSThread exit]应用程序挂起。

2 个答案:

答案 0 :(得分:4)

您在哪个线程中运行“[NSThread exit]”? [NSThread exit]在当前线程中运行,因此您需要将其作为 myfunction 选择器的一部分进行调用。如果你在主线程中调用它,它将只退出主线程。

此外,停止这样的线程并不是一个好主意,因为它会阻止线程退出清理资源。

myfunction 应该根据共享变量和协调线程退出。

- (void) myFunction
{
    while([someObject stillWorkToBeDone]) 
    { 
      performBitsOfWork();
    }
}

您可以使用“withObject”在协调线程和工作线程之间共享引用。通过这种方式,协调线程可以更改共享对象中的实例变量,以便工作线程可以根据这种情况停止它的工作。

要退出工作线程,协调线程只会调用smth:

[someObject setStillWorkToBeDone:false];

答案 1 :(得分:3)

你应该致电

-[NSThread cancel]

在您创建的主题上并检查

-[NSThread isCancelled]
在你的while循环中