適当に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;
}