2016年4月19日火曜日

Windowsの各種Timerの精度について

WindowsはいくつかのTimerを提供しています。

があり、それぞれに特徴があります。
などはよく知られていると思います。しかし実際どうなっているのか気になって調べたところOn WinAPI timers and their resolutionという比較記事を見つけました。しかしOSバージョンが明示されていないなど疑問は解消しなかったため、自分で比較してみることにしました。
比較コードおよびWindows 7、Windows 8.1、Windows 10での測定結果をgistにまとめました。その結果、いろいろなことがわかりました。
  • Message Timerは依然として分解能16msのままである。
  • Multimedia TimerはtimeBeginPeriodを呼ばなくても精度がよい。
  • むしろTimer Queues、Threadpool Timer、Waitable TimerこそtimeBeginPeriodの影響を受けている。
  • Timer QueuesとThreadpool TimerはWindows 7ではMultimedia Timerに依存していたようで精度がよかったが、Windows 8以降でtimeBeginPeriodを呼ばない場合はMessage Timer相当に精度が下がる。更にWindows 10ではtimeBeginPeriodを呼んだ場合でも多少精度が下がる。
  • Waitable TimerもtimeBeginPeriodを呼ばない場合はMessage Timer相当に精度が下がる。
結論としては、Windows 10時代においてもMultimedia Timer安定でしょうか。

0 件のコメント: