タイマ

タイマの作成にはCreateTimer関数を使います. 通常,CreateTimerInitの中で呼びます.

FWApp

UTTimerIf* CreateTimer(UTTimerIf::Mode mode)

 

引数modeに指定できる値はUTTimerSetModeと同じです. #.#.#節を参照してください. 戻り値としてUTTimerのインタフェースが返されます. 周期などの設定はこのインタフェースを介して行います.

シミュレーション用と描画用に2つのタイマを作成する例を以下に示します.

UTTimerIf *timerSim, *timerDraw;
timerSim = CreateTimer(MULTIMEDIA);
timerSim->SetInterval(10);
timerDraw = CreateTimer(FRAMEWORK);
timerDraw->SetInterval(50);

この例ではシミュレーション用には周期を$10$[ms]のマルチメディアタイマを使い, 描画用には周期$50$[ms]のフレームワークタイマ(GLUTタイマ)を使っています.

タイマを始動すると,周期ごとに以下の仮想関数が呼ばれます.

FWApp

virtual void TimerFunc(int id)

 

タイマの判別は引数$id$で行います.

TimerFuncのデフォルトの振る舞いでは, カレントウィンドウのシーンのStepを呼び,つぎにPostRedisplayで再描画要求を発行します (その結果,直後にDisplay関数が呼び出されます). この振る舞いをカスタマイズしたい場合はTimerFunc関数をオーバライドします.

void TimerFunc(int id){
    // proceed simulation of scene attached to current window
    if(id == timerSim->GetID()){
        GetCurrentWin()->GetScene()->Step();
    }
    // generate redisplay request
    else if(id == timerDraw->GetID()){
        PostRedisplay();
    }
}

この例ではシミュレーションと描画に異なる2つのタイマを使用しています.