4

我正在使用这样的线程,

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

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

4

2 回答 2

4

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

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

myfunction应该基于与协调线程的共享变量退出。

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

您可以使用“withObject”在协调线程和工作线程之间共享一个引用。这样,协调线程可以更改共享对象中的实例变量,以便工作线程可以根据此条件停止其工作。

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

[someObject setStillWorkToBeDone:false];
于 2009-05-26T07:30:58.223 回答
4

你应该打电话

-[NSThread cancel]

在您创建的线程上并检查

-[NSThread isCancelled]

在你的 while 循环中。

于 2012-07-26T11:20:25.527 回答