この質問は についてSystem.Threading.Thread.Sleep(int)
です。10 進数値のメソッドがないことはわかっていますが、実際には 10 進数を扱う必要があります。
1度回転するのに20.37ミリ秒かかるデバイスがあります。したがって、20.37 の適切な乗算 (2 度 = 20.37*2 など) のために、コードをスリープ状態にする必要があります。スレッド クラスには 10 進数のスリープ メソッドがないため、どうすればこれを行うことができますか?
この質問は についてSystem.Threading.Thread.Sleep(int)
です。10 進数値のメソッドがないことはわかっていますが、実際には 10 進数を扱う必要があります。
1度回転するのに20.37ミリ秒かかるデバイスがあります。したがって、20.37 の適切な乗算 (2 度 = 20.37*2 など) のために、コードをスリープ状態にする必要があります。スレッド クラスには 10 進数のスリープ メソッドがないため、どうすればこれを行うことができますか?
コメントで指摘されているように、Thread.Sleep
100% 正確ではありません。ただし、次のように、ミリ秒をティックに変換し、新しいものを作成しTimeSpan
てメソッドを呼び出すことにより、(理論的には) 20.27 ミリ秒待機させることができます。
Thread.Sleep(new TimeSpan(202700))
//202700 is 20.27 * TimeSpan.TicksPerMillisecond (which is 10,000)
繰り返しますが、これはおそらく 100% 正確ではありません (Thread.Sleep は少なくともその時間だけを保証するため)。しかし、それが十分に正確であれば、問題ありません。
回避策として、少し数学を使用できます。極度に正確である必要はないが、全体的にフロートの正確なスリープが必要であると仮定しましょう。
Thread.Sleep(new Random().Next(20,21));
これにより、最大 20.5 のスリープ タイミングが得られるはずです。今すぐ想像力を働かせてください。
TotalSleeps / attempts = 「必要な値である必要があります」が、単一のスリープ間隔の場合、これは当てはまりません。
以前にインスタンスを作成する new Random() を使用しないでください。