Grand Central Dispatch перезапускает длительный процесс, если требуется

Я новичок в GCD, поэтому, надеюсь, у меня есть правильная идея, но мне нужен совет....

У меня есть приложение, которое должно выполнять некоторую обработку рендеринга в фоновом режиме для поддержания производительности. Итак, я использую следующий код.... ('ish)

    dispatch_queue_t renderQueue = dispatch_queue_create("myLongRunningProcess", NULL);
    dispatch_async(renderQueue, ^{

    /* Perform several long running rendering processes which could */
    /* take 2-3 seconds in total */
    });

Поскольку это длительный процесс, состоящий из нескольких операций, может потребоваться повторный перезапуск процесса рендеринга путем взаимодействия с пользователем в основном потоке.

Итак, как я могу сигнализировать этому процессу о перезапуске или, альтернативно, формировать какую-то очередь и механизм флагов, которые могут привести к прерыванию этого процесса и разрешить перезапуск рендеринга.

Помощь и советы приветствуются.


person Fittoburst    schedule 08.05.2014    source источник


Ответы (1)


NSOperationQueue — ваш друг: https://developer.apple.com/library/mac/documentation/cocoa/reference/NSOperationQueue_class/Reference/Reference.html

Его API проще для понимания, чем GCD, но он использует GCD в своих базовых операциях. Вы можете легко повторно использовать, отменять или приостанавливать фоновые операции.

Вот учебник о том, как его использовать. http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues

person mj_jimenez    schedule 08.05.2014