Создайте очередь приоритетной последовательной отправки с GCD - программирование
Подтвердить что ты не робот

Создайте очередь приоритетной последовательной отправки с GCD

Как создать настраиваемую последовательную очередь, которая выполняется с высоким приоритетом?

Сейчас я использую myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);, но это не похоже на установку приоритета?

4b9b3361

Ответ 1

Создайте последовательную очередь, затем используйте dispatch_set_target_queue(), чтобы установить свою целевую очередь в очередь с высоким приоритетом.

Вот как:

dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));

Теперь myQueue должен запускаться последовательно с высоким приоритетом. Здесь другой ответ SO, если вы хотите узнать больше.

Ответ 2

Функция dispatch_queue_attr_make_with_qos_class может быть новой, поскольку принятый ответ был отправлен, но что-то вроде:

dispatch_queue_attr_t priorityAttribute = dispatch_queue_attr_make_with_qos_class(
    DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, -1
);

myQueue = dispatch_queue_create("com.MyApp.MyQueue", priorityAttribute);

может дать очереди высокий приоритет ("качество обслуживания"). Существует более высокий класс QOS, но QOS_CLASS_USER_INITIATED эквивалентен DISPATCH_QUEUE_PRIORITY_HIGH.

Ответ 3

Это требование, что у вас есть пользовательская очередь? Если нет, вы можете посмотреть на отправку блока в глобальную очередь с высоким приоритетом, которую вы можете получить, используя:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)

помните, что это глобальная очередь, поэтому она может влиять на другие параллельные операции.