Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用GCD创建高优先级串行调度队列_Objective C_Macos_Grand Central Dispatch - Fatal编程技术网

Objective c 使用GCD创建高优先级串行调度队列

Objective c 使用GCD创建高优先级串行调度队列,objective-c,macos,grand-central-dispatch,Objective C,Macos,Grand Central Dispatch,如何创建以高优先级运行的自定义串行队列 现在我正在使用myQueue=dispatch\u queue\u create(“com.MyApp.myQueue”,NULL)但这似乎不允许设置优先级?是否要求您有一个自定义队列?如果没有,您可以考虑将块分配到高优先级全局队列,您可以使用以下方法检索该队列: dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 请记住,这是全局队列,因此可能会

如何创建以高优先级运行的自定义串行队列


现在我正在使用
myQueue=dispatch\u queue\u create(“com.MyApp.myQueue”,NULL)但这似乎不允许设置优先级?

是否要求您有一个自定义队列?如果没有,您可以考虑将块分配到高优先级全局队列,您可以使用以下方法检索该队列:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)

请记住,这是全局队列,因此可能会影响其他并发操作。

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

以下是方法:

dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
现在,
myQueue
应该以高优先级连续运行。 如果您想了解更多信息,请点击这里。

该函数可能是新的,因为已发布接受的答案,但类似于:

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\u class\u USER\u INITIATED
相当于
DISPATCH\u QUEUE\u PRIORITY\u HIGH

好的,这仍然意味着我的队列本身将保持串行,但随后将其工作发布到并发队列?是的!应该做你想做的。等等!队列可以将块分派到其他队列中?!?当然可以。事实上,如果我没有记错代码,串行队列最终总是以一个全局并发队列为目标。不要引用我的话,我已经有一段时间没有读过那个代码了。太棒了!我甚至不知道这是可能的(在队列本身上设置目标队列),但在文档中它甚至是:
调度队列的优先级是从其目标队列继承的。使用dispatch_get_global_queue函数获得所需优先级的合适目标队列。
要求队列为串行队列。这应该是可接受的答案。这是正确的方法,这是正确的方法。我做了很多高性能的应用程序。不要使用默认值