Как выйти из NSThread - PullRequest
3 голосов
/ 26 мая 2009

Я использую нить, как это,

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

поток работает правильно, я хочу выйти из потока в середине, как мне это сделать. Если я использую [NSThread exit], приложение зависает.

Ответы [ 2 ]

4 голосов
/ 26 мая 2009

В каком потоке вы запускаете "[NSThread exit]"? [NSThread exit] выполняется в потоке current , поэтому вам нужно вызывать его как часть селектора myfunction . Если вы вызовете его в главном потоке, он просто выйдет из основного потока.

Кроме того, не рекомендуется останавливать такие потоки, так как это предотвращает очистку ресурсов при выходе из потока.

myfunction должен завершиться на основе общей переменной с координирующим потоком.

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

Вы можете поделиться ссылкой между координирующим потоком и рабочим потоком, используя "withObject". Таким образом, координирующий поток может изменить переменную экземпляра в общем объекте, чтобы рабочий поток мог остановить свою работу на основе этого условия.

Чтобы выйти из рабочего потока, координирующий поток просто вызовет что-то вроде:

[someObject setStillWorkToBeDone:false];
3 голосов
/ 26 июля 2012

Вам следует позвонить

-[NSThread cancel]

в созданной вами теме и проверьте

-[NSThread isCancelled]

в вашем цикле while.

...