私は、glutTimerFunc() を使用して GLUT GUI によって可能な限り短い時間でエンジンを実行する必要があるアプリケーションを使用しています。
void SetGLUTTimer(void);
void callback(int value)
{
Engine* pEngine;
pEngine = (Engine*) value;
pEngine->Process();
pEngine->SetGLUTTimer();
}
void Engine::SetGLUTTimer(void)
{
glutTimerFunc(50, callback, (int)this);
}
bool Engine::Run(void)
{
if (m_pViewer != NULL)
m_pViewer->Run();
else
return false;
return true;
}
時間のしきい値を 1000 ミリ秒以上に設定すると、エンジンのコールバックが定期的に呼び出されますが、1 秒未満の他の間隔 (上記の例のように) では、GUI が無期限に実行され、エンジンの Process() 関数が実行されることはありません。