Reputation: 697
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);
but this doesn't seem to allow for setting a priority?
Upvotes: 23
Views: 14119
Reputation: 4529
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
.
Upvotes: 19
Reputation: 41801
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.
Upvotes: 38
Reputation: 1846
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.
Upvotes: -3