Как получить список задач в очереди GCD? - PullRequest
4 голосов
/ 13 марта 2012

Я получаю основную очередь в GCD, как показано ниже, и добавляю в свои приложения разные задачи из разных классов.

dispatch_queue_t queue = dispatch_get_global_queue (
    DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

Теперь я хочу узнать, сколько моих задач все еще находится в основной очереди GCD.

Есть ли способ получить список задач в очереди GCD?

Спасибо

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

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

dispatch_group_t taskGroup = dispatch_group_create();
dispatch_queue_t queue = //Get whatever queue you want here
dispatch_group_async(taskGroup, queue, ^ {
    [object doSomething];
});
dispatch_group_async(taskGroup, queue, ^ {
    [object doMoreStuff];
});
dispatch_group_async(taskGroup, queue, ^ {
    [object doEvenMoreStuff];
});
dispatch_group_notify(taskGroup, queue, ^{
    [object workDone];
});
dispatch_release(taskGroup);
2 голосов
/ 13 марта 2012

Обычно это делается с помощью групп рассылки, а не очередей. Вы можете назначать задачи группе, используя dispatch_group_async(), или вы можете вручную отмечать вещи в группе, используя dispatch_group_enter() и dispatch_group_leave(). Затем вы можете проверить, есть ли что-нибудь в группе, используя dispatch_group_notify() или dispatch_group_wait().

...