2012-06-08 3 views
0

У меня есть метод void, называемый «startTask».Cocoa Mac Отменить фоновый процесс

На кнопке мыши, запускает «startTask» в фоновом режиме следующим образом:

[self performSelectorInBackground:@selector(startTask) withObject:nil]; 

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

Заранее спасибо

+0

К сожалению, я просто понял, что вы звоните 'performSelectorInBackground' и не' performSelector', который изменяет вещи довольно немного. – Vervious

+0

Также см. Http://stackoverflow.com/questions/4992472/how-to-stop-performing-selector-in-background и http://stackoverflow.com/questions/7702023/prevent-performselectorinbackground-from-running- дважды – Vervious

ответ

0

Я хотел бы использовать NSOperation и NSOperationQueue. Они позволяют отменить. Для получения сигнала требуется гораздо больше работы для получения сигнала.

Edit-- для примера

Создать простой класс, который подкласс NSOperation

В вашей реализации реализовать метод -(void)main(){ }. Этот метод вызывается, когда выполняется ваша операция.

В файле, который вы хотите запустить из создания переменной-члена NSOperationQueue.

Когда вы хотите запустить свою задачу, создайте операцию и добавьте ее в очередь. он будет работать асинхронно, и вы можете отменить его.

Вот вопрос для прошивки, но я считаю, что это должно быть тем же самым для Cocoa NSOperation on the iPhone

+0

вы могли бы разместить пример того, как я буду создавать и отменять NSOperation? Спасибо за вашу помощь. – Cristian

+0

спасибо за вашу помощь. Не могу ли я отменить процесс, вызванный функцией performselectorinbackground? – Cristian

+0

Невозможно отменить потоки в том смысле, что вы имеете в виду - резко прекратить их без их сотрудничества. Вы можете только сигнализировать им, что они должны выйти и закодировать задачу, чтобы она часто проверяла этот сигнал и изящно завершала себя. Это связано с тем, что поток может находиться в середине изменения общего состояния или он может содержать общие ресурсы, такие как блокировки. Если вы прерываете его внезапно извне, общее состояние может находиться в поврежденном, частично измененном состоянии, или общие ресурсы могут в конечном итоге быть отклонены остальным вашим приложением. –

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