時間を計測する関数

Windowsで時間を計測する場合、関数が沢山あって迷ってしまうらしいです。

そこで私が使う関数を精度順にならべてみました。

  • QueryPerformanceCounter(パフォーマンスカウンタ)
  • timeGetTime(マルチメディアタイマ)
  • GetTickCount(標準タイマ)
  • clock ≒ GetSystemTimeAsFileTime(C言語標準)

分解能が高いと他プロセスに与える負荷が増えるため、用途に応じて精度ギリギリの関数を選択すると良いと思います。


このうち、最もお勧めできるのがGetTickCountです。関数として使いやすく、どんなOSでも最低分解能が15ms程度はあると思います。

次にお勧めできるのがtimeGetTimeです。MSDNには1msの分解能を持つと書いてありましたが、昔計測したら2ms程度だった記憶があります。

また、C言語使いには便利なclock関数ですが、Windowsでは結局Win32APIを呼び出す事になるので、精度を落とす結果になります。他プラットフォームと共通したソースを書く必要がないときには避けましょう。

最強のカウンタであるQueryPerformanceCounter系は、NT系でしか利用できないためお勧めできません。そんなに精度が必要ならば大人しくx86アセンブラのrdtsc命令でも使いましょう。

当然ですが、WindowsはリアルタイムOSではないから、示した分解能は目安でしかないということに注意してください。さらに、OSによる違い、CPUのタイムスライスの設定、プロセスの優先度でも大きく変化するでしょう。



(06/03/10) パフォーマンスカウンタの例を簡単なものに修正。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz