2013-07-17 52 views

回答

34

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

方法如下:

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

现在myQueue应该是连续的,高优先级运行。 这里的another SO answer如果你想知道更多。

+0

好吧,这仍然意味着我的队列本身将保持连续,但然后将其工作发布到并发队列? –

+0

yup!应该做你想做的。 –

+0

非常感谢! –

-2

是否需要您有自定义队列?如果没有,你可以看看调度块到高优先级全局队列,您可以检索使用:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 

记住,这是全球性的队列,因此它可能影响其他并发操作。

+5

要求是我需要队列是串行的。 –

2

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

+1

这现在应该是被接受的答案。这是做到这一点的正确方法。 – Rob