libdispatchは呼び出す必要がなくdispatch_main()
、ディスパッチメインキューを介してメインスレッドのrunloopと統合されます。dispatch_get_main_queue(3)
およびそのCOMPATIBILITY
セクションを参照してください。
メインキューを呼び出さずdispatch_main()
に使用する実行可能ファイルは、ディスパッチメインキュー上のブロックを処理するための共通モードの1つでメインスレッドrunloopを実行する必要があります。標準のフレームワークメソッド(例)を介して間接的に、NSApplicationMain()
またはCFRunLoopまたはNSRunLoopAPIを介して直接。
シンボルを使用しようとしないでください。_dispatch_main_queue_callback_4CF
これはライブラリ内部の実装の詳細であり、将来変更される可能性が非常に高く、シンボルに依存するコードは警告なしに破損します。
libdispatchとカスタムの非メインスレッドCFRunLoopsの統合は、CFRunLoopPerformBlock()
APIやカスタムのrunloopソースなど、さまざまな方法で実現できます。
更新: Linuxでは、libdispatchソースを変更する必要があります。カスタムrunloopsAFAIKとの相互運用に対する既存のサポートはありません。
Linuxでメインキューを既存のrunloopと統合する最も簡単な方法は、おそらく_dispatch_main_queue_callback_4CF()
イベントループを介して毎回(できれば名前を変更した)関数
を呼び出し、 _dispatch_queue_wakeup_main()
runloopをウェイクアップするのに適切なメソッドに置き換えることです(たとえば、 runloopが待機しているパイプ)。