タイマの作成にはCreateTimer関数を使います. 通常,CreateTimerはInitの中で呼びます.
FWApp |
|
UTTimerIf* CreateTimer(UTTimerIf::Mode mode) |
引数modeに指定できる値はUTTimerのSetModeと同じです. #.#.#節を参照してください. 戻り値としてUTTimerのインタフェースが返されます. 周期などの設定はこのインタフェースを介して行います.
シミュレーション用と描画用に2つのタイマを作成する例を以下に示します.
UTTimerIf *timerSim, *timerDraw; timerSim = CreateTimer(MULTIMEDIA); timerSim->SetInterval(10); timerDraw = CreateTimer(FRAMEWORK); timerDraw->SetInterval(50);
この例ではシミュレーション用には周期を[ms]のマルチメディアタイマを使い, 描画用には周期[ms]のフレームワークタイマ(GLUTタイマ)を使っています.
タイマを始動すると,周期ごとに以下の仮想関数が呼ばれます.
FWApp |
|
virtual void TimerFunc(int 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つのタイマを使用しています.