有時我需要睡眠非整數毫秒,但無法找到這樣做的方法。 例如,如果我想睡覺毫秒的一半,我想這樣做:如何獲得類似的結果,就像Thread.Sleep支持double值?
Thread.Sleep(0.5);
,但不能,因爲睡眠只支持整數。
有時我需要睡眠非整數毫秒,但無法找到這樣做的方法。 例如,如果我想睡覺毫秒的一半,我想這樣做:如何獲得類似的結果,就像Thread.Sleep支持double值?
Thread.Sleep(0.5);
,但不能,因爲睡眠只支持整數。
如果您的時間是如此重要的不是您正在使用完全錯誤的工具的工作,因爲
了Thread.Sleep(n)表示阻塞當前線程至少 號的時間片(或線程的量程)可能發生在n 毫秒內。時間片的長度在Windows和不同處理器的不同 版本/類型上不同,通常 的範圍從15到30毫秒不等。這意味着該線程幾乎可以保證在不同的 計算機上屏蔽大於或等於n毫秒的 。你的線程在n毫秒後重新精確地喚醒 的可能性幾乎是不可能的。所以, Thread.Sleep是沒有意義的時間。
您可以閱讀關於此here的全部信息。
注:如果你發佈你試圖解決與
的Thread.Sleep問題
,我們也許能夠引導你在正確的方向
Thread.Sleep
不支持非整數值毫秒,因爲它沒有亞毫秒分辨率。實際上,分辨率可能會遠高於1毫秒(可能是15毫秒甚至更高,這取決於硬件)。我懷疑API設計者在決定數據類型時會考慮這一點。
順便說一下,有兩種特殊情況。
Thread.Sleep(0)
- 這將導致線程屈服到具有相同或更高優先級的另一個線程。
Thread.Sleep(1)
- 這將導致線程屈服於任何線程,而不管優先級如何。
+1我同意你的意見。 'Thread.Sleep'不能保證準確的時間。 –
謝謝。我想,如果我需要睡眠不足,我只會使用Thread.Sleep(1)。我模擬物理設備測量序列,在圖表中顯示(例如測量pH,電導率,安培等)。您可以將圖表縮放比例很大,因此即使是毫秒也可見。人們可以設置不同的設備詢問頻率,所以我希望圖表上的值可以按用戶設置的時間相同的毫秒數分隔。但如果這不容易,我可以忍受1毫秒的限制。不過,還是很好的瞭解如何睡眠ms的浮點數。 – Kosmos