1

私は標準的な過剰な実装をしています。表示関数は各オブジェクトを再描画しますが、各オブジェクトの特定の値を常に更新する必要があります。現状では、これを行うために考えることができる唯一の方法は、更新を処理するスレッドを生成することです。ただし、別のスレッドから glutPostRedisplay() を使用して、ウィンドウを更新するために glut を取得することはできません。glutループと並んで値を更新するループを持つ良い方法は何ですか?

また、(sleep() を 1 秒単位で使用するのではなく) 秒単位でスリープする最良の方法は何ですか。

4

1 に答える 1

2

何らかの定期的な更新が必要な場合は、おそらくglutIdleFunc. これは、処理するイベントがない場合にループで呼び出される関数です。(できるだけ速くではなく) 一定の間隔で何かを呼び出したい場合はglutTimerFunc、GLUT ループによって数ミリ秒後に何かを実行するようにスケジュールできるようにすることをお勧めします。

usleep2番目の質問については、数秒でスリープする必要がある場合は、マイクロ秒の解像度のスリープ期間を試すかnanosleep、ナノ秒でスリープ期間を指定することをお勧めします(ただし、実際にはナノ秒の解像度を取得するつもりはありません)。あなたが使用しているプラ​​ットフォームや Windows で利用できるかどうかはわかりませんが、POSIX 互換システム (Linux、BSD、Mac OS X) で利用できるはずです。しかし、おそらくあなたの目的のためglutTimerFuncにはうまくいくでしょう。

編集して追加: Windows では [ Sleep]( http://msdn.microsoft.com/en-us/library/ms686298(VS.85%29.aspx) (大文字に注意) を使用する必要があるようですS)。ミリ秒単位で時間がかかります。

于 2009-10-23T02:50:20.723 に答える