kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

Sleep処理の誤差が気になったので動作確認ソフトウェアを作成してみました

C#.Netにおいて、System.Threading.Thread.Sleep()で、数ミリ秒の時間を扱ってプログラムを書いていました。動作させてみると、このSleep処理で思ったタイミングで動作していないように思えました。調べてみるとSleep処理には、ある程度誤差が発生するようです。しかもこの誤差は端末(?)やOSによって異なるようです。私の環境では、どの程度の誤差が発生するのか、動作確認ソフトウェアを作って調べてみました。

作成したプログラムの結果では、1秒のスリープを3回行い、最小2ミリ秒、最大24ミリ秒の誤差がありました。

動作確認ソフトウェア

作成したのは、左のようなソフトウェアです。Sleepさせる時間と、測定する回数を入力して、実行ボタンを押すと、画面下部に測定結果が表示されます。最後の2行に、Sleepした時間の最小値と最大値が表示され、誤差が確認できるようにしています。

作成したソフトウェアとソースは、次の場所に、SleepCheck-XXX.zip(XXXはバージョン番号)という名前でおいておきました。
ダウンロード - Kurukurupapa SandBox - SourceForge.JP

動作環境

Windows 7 64bit
Microsoft Visual C# 2010 Express