Create a high priority serial dispatch queue with GCD

前端 未结 3 1003
情书的邮戳
情书的邮戳 2020-12-09 09:44

How can I create a custom serial queue that runs at high priority?

Right now I\'m using myQueue = dispatch_queue_create(\"com.MyApp.MyQueue\", NULL); bu

相关标签:
3条回答
  • 2020-12-09 09:47

    is it a requirement that you have a custom queue? If not, you could look at dispatching a block to the high priority global queue, which you can retrieve using:

    dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
    

    keep in mind that this is the global queue so it may impact other concurrent operations.

    0 讨论(0)
  • 2020-12-09 09:53

    Create a serial queue, then use dispatch_set_target_queue() to set its target queue to the high priority queue.

    Here's how:

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

    Now myQueue should run serially with high priority. Here's another SO answer if you want to know more.

    0 讨论(0)
  • 2020-12-09 10:03

    The dispatch_queue_attr_make_with_qos_class function may be new since the accepted answer was posted, but something like:

    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);
    

    could give the queue a high priority ('quality of service'). There is a higher QOS class, but QOS_CLASS_USER_INITIATED is equivalent to DISPATCH_QUEUE_PRIORITY_HIGH.

    0 讨论(0)
提交回复
热议问题