現在、ウェブカメラを開いてデータを受信するプロジェクトに取り組んでいます。OS X では、QTKit と QTCaptureSession を使用して Web カメラにアクセスします。私たちが開発しているモジュールは、次の問題を引き起こすメイン プロセスのスレッドによってプラグインとしてロードされます。
QTCaptureSession の addInput メソッドは、「メイン ループ」で何らかのイベントが処理されるのを待っているようです。メイン ループはメイン スレッド (ネイティブの Cocoa アプリケーションではない) によってトリガーされることはないため、プラグインを呼び出すスレッドは永久にハングします。
同様の問題がこの投稿で説明されています。推奨される解決策の 1 つは、メイン スレッドに への呼び出しを振りかけることですCFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);
。テスト済みで動作しますが、不要な (そしてプラグインに依存する) コードがメイン アプリケーションに追加されます。
私の質問は: プラグイン内で QTCaptureSession が対話するメインイベント ループを「ホスト」する方法はありますか? 例: メインループなどをトリガーできる人工スレッドを作成します。
これを OS X 10.6 で動作させる必要があることに注意してください。