1
2

More than 5 years have passed since last update.

発掘:timeGetTime(の使い方) www.tsg.ne.jp/sept/prg/memo/timegettime.asp

Last updated at Posted at 2018-09-05

発掘の趣旨

timeGetTime -tsg.ne.jp
が数多くリンクされているにも関わらずDeadLinkになっている
21 May 2001 - 24 Sep 2009
まで存在していたようだ。

2001年ごろはゲームにもms単位の精度はさほど要求されていなかったことがわかる。

timeGetTimeの使い方

 まずmmsystem.hをインクルード。 そしてwinmm.libとリンクする。

 Windowsが起動してからの時間をミリ秒単位で返す。 Win9xではこの関数の標準の精度は1ms。 しかしNTでは標準では5ms以上。 timeBeginPeriod とtimeEndPeriodを使って精度を決める。

timeBeginPeriod( 1 );//精度を1msに設定

//timeGetTimeを使う

timeEndPeriod( 1 );//timeBeginPeriodで指定した値を渡す

Win9xで作った物をそのままWinNTで動かそうとするとおかしくなる。

GetTickCountとの精度比べはしたことはないけれど、 マルチメディアタイマーというからには、 timeGetTimeのほうがいいのでは、と思う。

These multimedia timer services allow you to schedule timer events at a higher resolution than other timer services.

こんなこともSDKドキュメントに書いてあるし。

60fpsの測り方

こんな感じで測るといいらしい。


    DWORD dwLastFlipped;//前回の時間
    DWORD dwErrorValue;//誤差値

    void doWait(){
        DWORD dw,dw2;
        while( 50 > (dw2 = ((dw = timeGetTime()) - dwLastFlipped) * 3 + dwErrorValue ) ){
            Sleep( 1 );
        }
        dwLastFlipped = dw;
        dwErrorValue = dw2 % 50;
    }

Pentium2 300MHzのマシンで1000万回呼んだ時、GetTickCountは650ms、timeGetTimeは3800ms程度掛かった。 GetTickCountより重いとはいえ問題にならない程度だと思う。

QueryPerformanceCounterというのもあるらしい。 根拠は無いが、ゲームに使う分にはtimeGetTimeで十分ではないだろうか。

NVIDIAに Timer Function Performanceというツールがあった

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2