如何创建以高优先级运行的自定义串行队列?
现在我正在使用myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
,但这似乎不允许设置优先级?
答案 0 :(得分:36)
创建一个串行队列,然后使用dispatch_set_target_queue()
将其目标队列设置为高优先级队列。
以下是:
dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
现在myQueue
应该以高优先级顺序运行。
如果您想了解更多信息,请another SO answer。
答案 1 :(得分:10)
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
。
答案 2 :(得分:-3)
是否要求您拥有自定义队列?如果没有,您可以查看将块分派给高优先级全局队列,您可以使用以下方法检索该队列:
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
请记住,这是全局队列,因此可能会影响其他并发操作。