2016-04-08 5 views
0

Используя этот код, я могу выполнить мой код в фоновом режиме.Убить или прерывать метод dispatch_queue_t

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul); 
     dispatch_async(queue, ^{ 
      // Perform async operation 
      // Call your method/function here 
      // Example: 
      // NSString *result = [anObject calculateSomething]; 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       // Update UI 
       // Example: 
       // self.myLabel.text = result; 
      }); 
     }); 

Но я не могу найти решение, чтобы прервать этот фоновый поток. Есть ли способ убить или прервать очередь?

+0

Пожалуйста, будьте более конкретным в том, чего вы пытаетесь достичь. Из вашего описания проблемы я просто могу сказать, что вы идете неправильно. –

+0

@ Cy-4AH, я должен убить нить, когда пользователь нажимает кнопку HOME – Vyacheslav

+0

Кто вам сказал? Система приостанавливает ваши приложения, кроме случаев, когда вы запрашивали некоторые фоновые действия: фоновая задача, выборки и т. Д. –

ответ

3

Вы должны действительно использовать NSOperationQueue для управления потоком кода и создания своих NSOperation экземпляров, чтобы уважать собственность cancelled. Как только вы это сделаете, вы можете легко приостановить очередь (приостановить выполнение будущих операций) и отменить любые (или все) операции.

Обратите внимание, что ваша ответственность заключается в том, чтобы написать свою операцию для отмены - ей необходимо решить, в каких точках во время ее обработки разумно проверить статус cancelled и прервать дальнейшую обработку.

+0

Можете ли вы привести простой пример? – Vyacheslav

+0

есть, конечно, большое количество интро-руководств для «NSOperationQueue» в Интернете, если вы раньше не использовали его, это сообщение в блоге, а не ответ ... – Wain