別のスレッドでのglutPostRedisplay
-
05-07-2019 - |
質問
標準的な大食い実装があります。表示機能は各オブジェクトを再描画しますが、各オブジェクトの特定の値を常に更新する必要があります。現状では、これを行う唯一の方法は、更新を処理するスレッドを生成することです。ただし、別のスレッドのglutPostRedisplay()を使用して、ウィンドウを更新するためにglutを取得することはできません。過剰なループと一緒に値を更新するループを作成する良い方法は何ですか?
また、秒単位でスリープするのに最適な方法は何ですか(秒単位のsleep()ではなく)。
解決
何らかの定期的な更新が必要な場合は、 glutIdleFunc
。これは、処理されるイベントがない場合にループで呼び出される関数です。代わりに、(できるだけ速くではなく)定期的に何かを呼び出したい場合は、 glutTimerFunc
を使用すると、GLUTループで実行する何かを数ミリ秒後にスケジュールできます。
2番目の質問については、数秒の間スリープする必要がある場合は、 usleep
マイクロ秒の解像度のスリープ期間、または nanosleep
を使用して、ナノ秒単位でスリープ期間を指定します(実際にはナノ秒の解像度は得られません)。どのプラットフォームを使用しているか、またはWindowsで使用できるかどうかはわかりませんが、POSIX互換システム(Linux、BSD、Mac OS X)で使用できるはずです。しかし、おそらくあなたの目的のために glutTimerFunc
がより良く動作します。
追加する編集:Windowsでは[ Sleep
]( http://msdn.microsoft.com/en-us/library/ms686298(VS.85%29.aspx) (大文字の S
に注意)、ミリ秒単位の時間がかかります。