以下は、実行を中断するためのThread.Sleepを使用する単純なコードと、スレッドが実際にスリープした時間を見つけるためのStopwatch.ElapsedMillisecondsです。VBでThread.Sleepを使用した不思議な動作
Dim sw As New Stopwatch()
Dim elapsed_ms As Integer = 0
sw.Start()
While True
Threading.Thread.Sleep(10)
elapsed_ms = CInt(sw.ElapsedMilliseconds)
Debug.WriteLine("Elapsed: " & elapsed_ms & " ms")
sw.Restart()
End While
私の質問は:時折、デバッグプリントは0ミリ秒が経過したことを述べています。これはどのように可能ですか?私は、Thread.Sleep(10)が正確ではなく、通常10ミリ秒以上スリープしていることを知っていますが、最低10ミリ秒スリープすることが保証されていると思いました。
'StopWatch'で' Frequency'と 'IsHighResolution'をチェックして、実際に高解像度タイマを持つ' StopWatch'を持っていることを確認してください。 –
頻度は2531513です(これは私が考えると、半マイクロ秒までは正確でなければなりません)。どちらの方法でも、IsHighResolutionフィールドはTrueを読み取ります。 – Cobalt
新しい空のコンソールプロジェクトを作成し、コードに貼り付けることでこれを再現しようとしました。私は0msのラインは見ませんが、9msのラインがたくさん見えますが、私が理解しているところから実際には起こってはいけません。どのOSを使用していますか?これはコード全体ですか? –