【问题标题】:How to exit NSThread如何退出 NSThread
【发布时间】:2009-05-26 07:02:39
【问题描述】:

我正在使用这样的线程,

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

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

【问题讨论】:

    标签: iphone objective-c ios nsthread


    【解决方案1】:

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

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

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

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

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

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

    [someObject setStillWorkToBeDone:false];
    

    【讨论】:

      【解决方案2】:

      你应该打电话

      -[NSThread cancel]
      

      在你创建的线程上检查

      -[NSThread isCancelled]
      

      在你的 while 循环中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        相关资源
        最近更新 更多