2013-07-17 115 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