使用GCD创建高优先级串行调度队列

时间:2013-07-17 03:47:27

标签: objective-c macos grand-central-dispatch

如何创建以高优先级运行的自定义串行队列?

现在我正在使用myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);,但这似乎不允许设置优先级?

3 个答案:

答案 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)

请记住,这是全局队列,因此可能会影响其他并发操作。