JUCE ベースのマルチスレッド OpenGL アプリケーションの 3 つのインスタンスを 1 台のマシンで実行しています。各インスタンスは個別の X ディスプレイに接続されています。メイン アプリケーション スレッドの呼び出しXInitThreads
に続いXOpenDisplay
て、適切なディスプレイが呼び出されます。次に、メインのレンダリング ループに別のスレッドが使用されます。アプリケーションの 3 つのインスタンスは、次の起動時に 1 つのグラフィック設定が終了するように、互いに初期化されます。
80% のケースですべてが正常に起動しますが、アプリケーションの 2 番目または 3 番目のインスタンスで 4 番目の呼び出しglXMakeCurrent
(これは、接続が初期化されたスレッドとは異なるスレッドから行われた最初の呼び出しでもあります) で発生することがあります。二度と戻りません。glXMakeCurrent
X スレッドは初期化されており、スレッドはロックを使用しており、X ディスプレイへの呼び出しの直前にロックされてXLockDisplay
います (呼び出しが返された後にロック解除されます)。
各アプリケーションが正しい表示とコンテキストを使用していることを確認しました。複数のスレッドが同じディスプレイ接続にアクセスするという問題に純粋に関連している場合、最初のインスタンスでこの問題が発生する可能性は同じですが、発生することはありません。
glXMakeCurrent
X ディスプレイに排他的にアクセスできるにもかかわらず、なぜ戻ってこないのでしょうか?