如何創建以高優先級運行的自定義串行隊列?使用GCD創建高優先級的串行調度隊列
現在我正在使用myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
但這似乎不允許設置優先級?
如何創建以高優先級運行的自定義串行隊列?使用GCD創建高優先級的串行調度隊列
現在我正在使用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
應該是連續的,高優先級運行。 這裏的another SO answer如果你想知道更多。
是否需要您有自定義隊列?如果沒有,你可以看看調度塊到高優先級全局隊列,您可以檢索使用:
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
記住,這是全球性的隊列,因此它可能影響其他併發操作。
要求是我需要隊列是串行的。 –
的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
。
這現在應該是被接受的答案。這是做到這一點的正確方法。 – Rob
好吧,這仍然意味着我的隊列本身將保持連續,但然後將其工作發佈到併發隊列? –
yup!應該做你想做的。 –
非常感謝! –