1. ホーム
  2. ios

[解決済み] dispatch_queue_create のキュー属性とは?

2022-02-09 18:51:33

質問

Appleのサンプルコードでは AVCam-iOS。AVFoundation を使って画像と動画をキャプチャする というのは、次のような行があるからです。

// Communicate with the session and other session objects on this queue.
self.sessionQueue = dispatch_queue_create( "session queue", DISPATCH_QUEUE_SERIAL );

そして、2つ目のパラメータが何なのか、また、それ以外にどんなオプションがあるのかを知りたい。 DISPATCH_QUEUE_SERIAL ?

そして、紛らわしいのは、他のAppleのドキュメントでは、第2パラメータは予約されていて、次のように設定するように書かれていることです。 NULL . ドキュメントが古いのか、どなたか2番目のパラメータが何であるかを説明してください。

dispatch_queue_create 関数は、キュー名とキュー属性のセットという 2 つのパラメータを受け取ります。キュー属性は将来の使用のために予約されており、NULL であるべきです。 並行処理プログラミングガイド

解決方法は?

dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr);

キューは dispatch_queue_create() 関数で作成します。キューは 他のディスパッチオブジェクトと同様に 参照カウントされ、新しく作成されたキューの参照カウントは 1 となります。

オプションのlabel引数は、キューの目的を説明するために使用され、デバッグ時に便利です。 と性能解析ができる。ラベルが提供された場合、それはコピーされる。 慣習として、クライアントは 逆 DNS 形式のラベル。例えば

my_queue = dispatch_queue_create("com.example.subsystem.taskXYZ", NULL);

attr 引数は作成するキューの種類を指定し、DISPATCH_QUEUE_SERIAL または dispatch_queue_concurrent です。

から https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/dispatch_queue_create.3.html