2012-03-13 4 views
4

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

dispatch_queue_t queue = dispatch_get_global_queue (
    DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

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

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

Благодаря

+0

Тег GCD зарезервирован для «наибольшего общего делителя» - изменен тег, чтобы исправить его. – paxdiablo

ответ

4

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

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); 
+0

Извините, что диспетчерскую группу не удалось применить в моих приложениях. Поскольку несколько классов добавили бы несколько задач в очередь GCD. Диспетчерская группа, похоже, применяется только к одному экземпляру класса. Моя ситуация в том, что я хочу контролировать задачи из нескольких классов в центральном пуле на глобальном уровне. – user403015

+0

Не следует ли использовать dispatch_group_release внутри блока dispatch_group_notify вместо отправки_release под ним? – droussel

+1

В очереди будет сохранена группа, поэтому после ее завершения можно будет освободить ее (или я совершил ужасную ошибку, и приложение не будет функционировать ^^;) – borrrden

2

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

+0

Извините, что в группе отправки не удалось применить мои приложения. Поскольку несколько классов добавили бы несколько задач в очередь GCD. Диспетчерская группа, похоже, применяется только к одному экземпляру класса. Моя ситуация в том, что я хочу контролировать задачи из нескольких классов в центральном пуле на глобальном уровне. – user403015

+2

Группы добавляются в пункт отправки. Это не имеет никакого отношения к классам. Вы используете 'NSOperations', а не напрямую вызываете методы' dispatch_'? Если вы используете методы 'dispatch_', тогда вы можете применить группу в этой точке. –

+0

Мое положение: класс A, класс B и класс C добавили задачи в GCD внутри их собственных экземпляров. Как создать общую группу отправки для разных классов? Могу ли я передать созданную группу в разные классы? Благодарю. – user403015

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