multithreading - QGLWidgetのpaintGL()メソッドはどのQtスレッドから呼び出されましたか?

multithreading qt opengl rendering qglwidget

QGLWidgetのpaintGL()メソッドを使用して、OpenGLを使用するウィジェットに描画するとします。 QtがpaintGL()メソッドを呼び出した後、自動的にバッファスワップをトリガーします。 OpenGLでは、このバッファースワップは通常、バックグラウンドバッファーへのフレームレンダリングが完了するまで、呼び出しスレッドをブロックします。どのQtスレッドがpaintGLとバッファースワップを呼び出すのかと思います。メインのQt UIスレッドですか?もしそうなら、それはバッファスワップ中のブロックがUI全体もブロックすることを意味しませんか?このプロセス全般に関する情報は見つかりませんでした。

ありがとう
答え
QGLWidgetはあまり使用しませんが、そうだと考えてください。swapBuffers()が同期している場合、Qt GUIスレッドがスタックします。つまり、その操作中はイベントを処理できなくなります。

とにかく、これを実行中に問題が発生した場合は、マルチスレッドのOpenGLがこの問題を克服できるようにするthis articleを読むことを検討してください。

さらに良いことに、this articleは状況をよく説明し、Qt 4.8の新しいマルチスレッドOpenGL機能を紹介します。これは現在リリース候補になっています。
関連記事

c# - ロックなしの最良の同時スレッド共有メモリアーキテクチャは何ですか?

python - Pythonでgeventまたはスレッドを使用したredisを使用して、いくつかのタスクのためにアプリケーションを構造化する方法

iphone - 変更のたびに保存せずに、異なるスレッドからCore Dataオブジェクトに変更を加える方法

.net - レンダリングスレッドへの参照を取得して、スレッドセーフなデータアクセスを許可する

java - マルチスレッドプログラミングに関するレースシナリオ

c - Windowsスリム読み取り/書き込みロックの使用

c - 古いgccコンパイラの__sync_val_compare_and_swap関数の代替

ios - CoreDataマルチスレッド削除

multithreading - CPUソケットアフィニティを適用する方法

c# - MonotouchのSystem.ComponentModel.BackgroundWorker-正しい使い方?