22

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

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

4

3 回答 3

37

创建一个串行队列,然后用于dispatch_set_target_queue()将其目标队列设置为高优先级队列。

就是这样:

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

现在myQueue应该以高优先级连续运行。如果您想了解更多信息,这是另一个 SO 答案。

于 2013-07-17T04:02:26.130 回答
18

自发布接受的答案以来,该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.

于 2018-02-05T06:17:20.340 回答
-3

是否要求您有自定义队列?如果没有,您可以查看将块分派到高优先级全局队列,您可以使用以下方法检索:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)

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

于 2013-07-17T03:57:34.403 回答