web-dev-qa-db-ja.com

GCDを使用して優先度の高いシリアルディスパッチキューを作成する

高い優先度で実行されるカスタムシリアルキューを作成するにはどうすればよいですか?

現在、myQueue = dispatch_queue_create("com.MyApp.MyQueue", NULL);を使用していますが、これでは優先度を設定できないようです。

20
Mark Wheeler

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

方法は次のとおりです。

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

これで、myQueueは高い優先度でシリアルに実行されるはずです。詳細を知りたい場合は、 別のSO回答 )です。

36
Catfish_Man

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と同等です。

10
user2067021