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