2010-11-10 3 views
3

Так у меня есть метод, который выполняет петлю и из-за того, как моя программа работает я звоню этот метод с использованием,Как убить/остановить фоновый поток?

[self performSelectorInBackground:@selector(myMethod:) withObject:arg]; 

а сам метод,

- (void)myMethod:(id)arg { 
    //... 

    for (//Loop Conditions) { 
     if (stopMorse) { 
      break; 
     } 
     //Do stuff 
    } 

    //... 
} 

Теперь я хотел бы чтобы пользователь мог остановить этот цикл, так что есть способ убить/остановить поток.

Я попытался добавить BOOL, но проблема в том, что он, похоже, не обновляется, потому что он находится в отдельном потоке. Каков наилучший способ остановить запуск этого цикла?

+0

Сообщите нам, где объявлен «BOOL stopMorse» (глобальный, экземпляр класса и т. Д.) И покажите нам код, в котором вы его измените. – benzado

ответ

4

Вы не должны принудительно убивать/останавливать нить по причинам, указанным в this answer to a similar question, и this answer to another similar question.

Должно быть возможно проверить логическое значение, как вы это делаете, и не должно быть проблем с другим потоком, определяющим значение логического. Можете ли вы опубликовать код, который пытается установить логическое значение?

+0

Спасибо за помощь. Я смог понять это. Как вы сказали, можно проверить логическое значение, когда другой поток устанавливает его. Это была простая ошибка в моем коде. – cgossain

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