タイマ問題

前のつづき。
よく考えたらタイマ関係の分解能をきちんと調べたことがほとんどなかったような気がしたので、ちょっとやってみた。
サンプルプログラム : win32timercaps.zip

で、手元の環境(Win98SE)だと

  • timeGetDevCaps によるタイマ最小分解能は 1ms
  • GetTickCount の増分は 1ms 単位(あれ、50ms じゃないんだ?)
  • timeGetTime の増分も 1ms 単位
  • ただし、ときどきつんのめったように 10〜20ms ぐらい間があくことがある。GetTickCount より timeGetTime のほうがつんのめり時間は相対的に短いようだが、正直どっちもどっち。
  • timeSetEvent はきっちり 1ms 単位でコールバックできるようだ
  • _ftime は 50ms 単位の増分しか取れない。GetTickCount は 1ms 単位で取れるのに…

こんな感じでした。
結果は動作環境によって異なる可能性があります。(ちなみに、NT3.5 時代の古い SDK ヘルプには「タイマの精度は、 Intel(R) システムでは16ミリ秒まで、 MIPS(R) システムでは10ミリ秒までです」と書かれています)

…とりあえず qemu 的には、_ftime 使ってるとこを GetTickCount か timeGetTime に直す方向で……