Создайте очередь приоритетной последовательной отправки с GCD
Как создать настраиваемую последовательную очередь, которая выполняется с высоким приоритетом?
Сейчас я использую myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
, но это не похоже на установку приоритета?
Ответы
Ответ 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)
помните, что это глобальная очередь, поэтому она может влиять на другие параллельные операции.