NSWindow + NSViewをプログラムで作成するCocoaベースのコマンドラインアプリケーションがあります。 nextEventMatchingMaskループを使用して、イベント・ループとディスパッチ・イベントを手動でポンピングします。このループは、入力をポーリングするために、いくつかの上位レベルのコードによって定期的に呼び出されます。バックグラウンドスレッドからココアメッセージループをポップする
メインスレッドですべてを実行すると、ビューが入力イベントを正しく受信するという点で問題なく動作します。
代わりに、ウィンドウの作成とメッセージループを別のスレッドに移動すると、nextEventMatchingMaskはイベントを返さなくなり、ビューは入力を受け取りません。
私は、Cocoaアプリケーションの「メイン」スレッドだけがイベントを処理することになっていることを認識しています。しかし、このセカンダリスレッドはCocoaと話す必要がある唯一のスレッドなので、Cocoaに関する限り、これを「メイン」スレッドとして使用したいと考えています。これは可能ですか?私はこのスレッドからNSApplicationLoadを呼び出し、私が知っている限り、これはプロセスで呼び出された最初のCocoa関数です。
メインのCocoaスレッドを指定できない場合は、バックグラウンドスレッドでNSWindowを作成してイベントを受け取る他の方法はありますか?私はアプリケーションのメインループを制御していないので、NSApplication Runを呼び出すようなことはできません。私は、ウィンドウから入力イベントを取得する必要があります。
この:http://stackoverflow.com/questions/6178618/mac-os-x-is-it-possible-to-imbue-a-non私の状況とまったく同じようにメインスレッドになるメインスレッドとなる。 – eodabash