2013-07-17 9 views

答えて

34

シリアルキューを作成し、次にdispatch_set_target_queue()を使用して、ターゲットキューを高優先度キューに設定します。今

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

myQueueが高い優先度で逐次実行する必要があります。ここでは

は方法です。 もっと知りたい場合はanother SO answerです。受け入れ答えが投稿されましたので、

+0

大丈夫ですが、それでも私のキュー自体はシリアルのままですが、その作業を並行キューにポストすることを意味しますか? –

+0

yup!あなたが望むものだけをしなければならない。 –

+0

本当に助けてくれてありがとう! –

-2

カスタムキューが必要ですか?ない場合は、あなたが使用して取得することができ、優先度の高いグローバルキューにブロックを派遣で見ることができる:

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 

それは他の並行操作に影響を与える可能性があるので、これはグローバルキューであることに留意してください。

+5

必要条件は、キューをシリアルにする必要があることです。 –

2

dispatch_queue_attr_make_with_qos_class機能は新しいかもしれないが、のようなもの:

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_CLASS_USER_INITIATEDDISPATCH_QUEUE_PRIORITY_HIGHに相当します。

+1

これは現在受け入れられている回答になるはずです。これを行う正しい方法です。 – Rob

関連する問題