如何创建以高优先级运行的自定义串行队列?使用GCD创建高优先级的串行调度队列
现在我正在使用myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
但这似乎不允许设置优先级?
如何创建以高优先级运行的自定义串行队列?使用GCD创建高优先级的串行调度队列
现在我正在使用myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
但这似乎不允许设置优先级?
创建一个串行队列,然后使用dispatch_set_target_queue()
将其目标队列设置为高优先级队列。
方法如下:
dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
现在myQueue
应该是连续的,高优先级运行。 这里的another SO answer如果你想知道更多。
是否需要您有自定义队列?如果没有,你可以看看调度块到高优先级全局队列,您可以检索使用:
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
记住,这是全球性的队列,因此它可能影响其他并发操作。
要求是我需要队列是串行的。 –
的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
。
这现在应该是被接受的答案。这是做到这一点的正确方法。 – Rob
好吧,这仍然意味着我的队列本身将保持连续,但然后将其工作发布到并发队列? –
yup!应该做你想做的。 –
非常感谢! –