2013-07-17 15 views

cevap

34

Bir seri sıra oluşturun ve hedef sırasını yüksek öncelikli sırasına ayarlamak için dispatch_set_target_queue() kullanın.

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

Şimdi myQueue yüksek önceliğe sahip seri çalışmalıdır:

İşte nasıl. Daha fazla bilgi edinmek isterseniz, another SO answer.

+0

tamam harika, ve bu hala benim sıranın kendisinin seri olarak kalacağını ancak sonra işini eşzamanlı kuyruğa göndereceği anlamına mı geliyor? –

+0

yup! Ne istediğini yap. –

+0

teşekkürler gerçekten yardımsever! –

-2

Özel bir sıraya sahip olmanız şart mı? Değilse, kullandığınız alabilirsiniz yüksek öncelikli küresel kuyruğuna, bir blok sevk bakmak olabilir:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 

akılda tutmak diğer eşzamanlı operasyonlar etkileyebilir böylece bu küresel kuyruk olduğunu.

+5

Gereksinim, sıraya göre sıraya ihtiyacım olmasıdır. –

2

dispatch_queue_attr_make_with_qos_class işlevi kabul cevap yayınlanmıştır beri yeni olabilir, ama bir şey gibi olabilir:

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

kuyruğunu yüksek öncelik ('hizmet kalitesini') verebilir. Daha yüksek bir QOS sınıfı var, ancak QOS_CLASS_USER_INITIATED, DISPATCH_QUEUE_PRIORITY_HIGH'a eşdeğerdir.

+1

Bu şimdi kabul edilen cevap olmalı. Bunu yapmanın doğru yolu budur. – Rob