2009-05-26 1 views
3

Я использую нить, как это,Как выйти NSThread

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

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

ответ

4

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

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

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

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

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

Для выхода из рабочего потока координирующим поток будет просто назвать чем-л, как:

[someObject setStillWorkToBeDone:false]; 
3

Вы должны позвонить

-[NSThread cancel] 

на резьбе вы создали и проверить

-[NSThread isCancelled] 

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

 Смежные вопросы

  • Нет связанных вопросов^_^