優先順位が高いカスタムシリアルキューを作成するにはどうすればよいですか?GCDで優先度の高いシリアルディスパッチキューを作成する
今私はmyQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
を使用していますが、これは優先順位を設定するようには思われません。
優先順位が高いカスタムシリアルキューを作成するにはどうすればよいですか?GCDで優先度の高いシリアルディスパッチキューを作成する
今私はmyQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);
を使用していますが、これは優先順位を設定するようには思われません。
シリアルキューを作成し、次にdispatch_set_target_queue()
を使用して、ターゲットキューを高優先度キューに設定します。今
dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
myQueue
が高い優先度で逐次実行する必要があります。ここでは
は方法です。 もっと知りたい場合はanother SO answerです。受け入れ答えが投稿されましたので、
カスタムキューが必要ですか?ない場合は、あなたが使用して取得することができ、優先度の高いグローバルキューにブロックを派遣で見ることができる:
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
それは他の並行操作に影響を与える可能性があるので、これはグローバルキューであることに留意してください。
必要条件は、キューをシリアルにする必要があることです。 –
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_INITIATED
はDISPATCH_QUEUE_PRIORITY_HIGH
に相当します。
これは現在受け入れられている回答になるはずです。これを行う正しい方法です。 – Rob
大丈夫ですが、それでも私のキュー自体はシリアルのままですが、その作業を並行キューにポストすることを意味しますか? –
yup!あなたが望むものだけをしなければならない。 –
本当に助けてくれてありがとう! –