thread raywenderlich grand gcd dispatchqueue central async objective-c macos grand-central-dispatch

objective-c - raywenderlich - swift thread



Cree una cola de envĂ­o serial de alta prioridad con GCD (3)

¿Es un requisito que tengas una cola personalizada? De lo contrario, podría considerar enviar un bloque a la cola global de alta prioridad, que puede recuperar usando:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)

tenga en cuenta que esta es la cola global por lo que puede afectar a otras operaciones simultáneas.

¿Cómo puedo crear una cola serial personalizada que se ejecute con prioridad alta?

En este momento estoy usando myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL); ¿Pero esto no parece permitir establecer una prioridad?


Cree una cola en serie, luego use dispatch_set_target_queue() para establecer su cola de destino en la cola de alta prioridad.

Así es cómo:

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

Ahora myQueue debe ejecutarse en serie con alta prioridad. Aquí hay otra respuesta SO si quieres saber más.


La función dispatch_queue_attr_make_with_qos_class puede ser nueva desde que se publicó la respuesta aceptada, pero algo como:

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

podría dar a la cola una alta prioridad (''calidad de servicio''). Hay una clase de QOS más alta, pero QOS_CLASS_USER_INITIATED es equivalente a DISPATCH_QUEUE_PRIORITY_HIGH .