適当に60フレーム固定
Windows専用。
DWORD lastTime = timeGetTime(); while ( 1 ) { ... // 何かの処理 window->redraw(); Fl::check(); DWORD curTime = timeGetTime(); const DWORD frameTime = 1000 / 60; // 1フレームの長さ const DWORD strictWaitTime = 2; // 頻繁に Sleep を繰り返して、待つ時間 DWORD diff = curTime - lastTime; Fl::check(); DWORD curTime = timeGetTime(); const DWORD frameTime = 1000 / 60; // 1フレームの長さ const DWORD strictWaitTime = frameTime; // 頻繁に Sleep を繰り返して、待つ時間 DWORD diff = curTime - lastTime; if ( diff < frameTime ) { if ( diff + strictWaitTime < frameTime ) { // Sleep は実際にどのぐらいで帰ってくるか不明なので、 // ちょっと少なめに待つ。 Sleep( ( frameTime - diff ) - strictWaitTime ); } // 頻繁にチェック curTime = timeGetTime(); while ( curTime - lastTime < frameTime ) { Sleep( 0 ); curTime = timeGetTime(); } } lastTime = curTime; }