WinForms/GTK#/WPF/MonoMac/etc に依存せずに独自のウィンドウを作成する必要があるクロスプラットフォーム ライブラリを想像してみてください (これは、興味がある場合はOpenTKです)。
Windows および X11 対応の Unice は、各スレッドに 1 つずつ、複数のイベント ループをサポート (または使用できます) します。つまり、(a) スレッドごとに 1 つのウィンドウを作成し、それらを独立して動作させることができ、(b) あるスレッドで WinForms (または GTK#、WPF など) ウィンドウを実行し、別のスレッドで OpenTK ウィンドウを開くことができます。干渉なし。
さて、私の知る限りでは - 確かに限られた - 知る限り、Carbon はこれをサポートしていません。OS イベントは「メイン」イベント ループにのみ配信され、すべてのセカンダリ スレッドはヒュームで実行されます (つまり、ReceiveNextEvent は常に eventLoopTimedOutErr を返し、イベントを検出しません)。OpenTK 自体はこの制限で問題なく動作しますが、OpenTK と別のツールキット (MonoMac など) を組み合わせて構成ウィンドウを表示しようとするアプリケーションには、興味深い問題が生じます。
2 つのオプション:
- アイデアを狂ったものとして放棄し、OpenTK をさまざまなツールキットと混在させることを禁止します (悪い)。
- バトルアックスを選び、カーボンをハックして服従させます (良い)。
これがあなたが入ってきたところです:これを機能させる方法を考えられますか? 次のシナリオを想像してください。
- スレッド #1 (メイン) は、独自に選択した初期化コードを実行し、2 番目のスレッドを生成します (これは自由に変更できます)。
- スレッド #1 (メイン) はネイティブ ウィンドウを開き、RAEL ループ (RunApplicationEventLoop) を実行します。必要に応じてタイマーをインストールしてコードを実行することはできますが、直接制御することはできません。
- スレッド #2 (セカンダリ) は、すぐにハングする OpenTK ウィンドウを開きます (イベントはスレッド #1 にのみ配信され、ReceiveNextEvent は何も取得しません)。
スレッド #1 からのイベントをフィルタリングし、必要に応じてスレッド #2 に配信することは可能ですか? ここで CF が何らかの形で役立つ可能性はありますか? Mac OS X の達人、助けてください!
(プログラミング言語は問題ではありません。使い慣れたものを使用してください。Carbon ベースのソリューションが望ましいですが、Cocoa でも問題なく動作します。)