2013-07-17 12 views

risposta

34

Creare una coda seriale, quindi utilizzare dispatch_set_target_queue() per impostare la coda di destinazione sulla coda ad alta priorità.

Ecco come:

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

Ora myQueue dovrebbe funzionare in serie con la massima priorità. Ecco il numero another SO answer se vuoi saperne di più.

+0

ok bene, e questo significa che la mia stessa coda rimarrà seriale ma poi postare il suo lavoro nella coda concorrente? –

+0

sì! Dovrebbe fare solo quello che volevi. –

+0

grazie davvero utile! –

-2

è necessario disporre di una coda personalizzata? In caso contrario, si poteva guardare invio di un blocco alla coda globale priorità elevata, che è possibile recuperare utilizzando:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 

tenere a mente che questa è la coda globale in modo che può avere un impatto altre operazioni simultanee.

+5

Il requisito è che ho bisogno che la coda sia seriale. –

2

La funzione dispatch_queue_attr_make_with_qos_class può essere nuovo in quanto la risposta accettata è stato pubblicato, ma qualcosa di simile:

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

potrebbe dare la coda di una priorità elevata ('qualità del servizio'). Esiste una classe QOS più alta, ma QOS_CLASS_USER_INITIATED equivale a DISPATCH_QUEUE_PRIORITY_HIGH.

+1

Questa dovrebbe essere la risposta accettata. Questo è il modo corretto per farlo. – Rob

Problemi correlati