2024年4月15日月曜日

windows上で、.netでThread.Sleep(1)を実行すると停止誤差がやたらでかいときがある

10ミリ秒を超えてくる場合がある。

原因は単純でタイマーの解像度がおおよそ15.6ミリ秒だから。

 

 powercfg /energy

でタイマー精度を確認するわかる。

javaとかはたぶんVMでやってるからそんなに誤差でないんじゃないかな。知らんけど。

 timeBeginPeriodで最小解像度を変えればいいんだけど、

"バージョン 2004 Windows 10より前のバージョンでは、この関数はグローバル Windows 設定に影響します "

とか書いてあるから、実行するwindowsのバージョンによってはtimeBeginPeriodを使うのはアブないかもね。

 

0 件のコメント:

コメントを投稿