高い優先度で実行されるカスタムシリアルキューを作成するにはどうすればよいですか?
現在、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
は高い優先度でシリアルに実行されるはずです。詳細を知りたい場合は、 別のSO回答 )です。
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
と同等です。