Как остановить подпоток NSThread в iPhone

Я создал подпоток с помощью NSThread в основном потоке

NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(MyThread:) object:timer];

5 секунд спустя я использовал [newThread отмену] в основном потоке для остановки подпотока, но это не работало,

Метод MyThread: в newThread, все еще работающем

таким образом, что является корректным ответом для остановки newThread, СПАСИБО

на самом деле [newThread isCancelled] ДА, но селекторным MyThread был все еще Уокинг

8
задан None 7 July 2010 в 02:05
поделиться

1 ответ

Метод cancel только сообщает потоку, что он отменен (как вы упомянули, изменяет isCancelled на YES. Затем сам поток обязан проверить это и выйти. Например, в методе MyThread: вы можете сделать следующее:

// At some checkpoint
if([[NSThread currentThread] isCancelled]) {
    /* do some clean up here */
    [NSThread exit];
}

Вы должны периодически выполнять эту проверку и выходить из потока, как показано на рисунке; иначе cancel не будет иметь никакого эффекта.

10
ответ дан 5 December 2019 в 15:19
поделиться