2013-07-26 44 views

回答

7

如果您的時間是如此重要的不是您正在使用完全錯誤的工具的工作,因爲

了Thread.Sleep(n)表示阻塞當前線程至少 號的時間片(或線程的量程)可能發生在n 毫秒內。時間片的長度在Windows和不同處理器的不同 版本/類型上不同,通常 的範圍從15到30毫秒不等。這意味着該線程幾乎可以保證在不同的 計算機上屏蔽大於或等於n毫秒的 。你的線程在n毫秒後重新精確地喚醒 的可能性幾乎是不可能的。所以, Thread.Sleep是沒有意義的時間。

您可以閱讀關於此here的全部信息。

注:如果你發佈你試圖解決與

的Thread.Sleep問題

,我們也許能夠引導你在正確的方向

+0

+1我同意你的意見。 'Thread.Sleep'不能保證準確的時間。 –

+0

謝謝。我想,如果我需要睡眠不足,我只會使用Thread.Sleep(1)。我模擬物理設備測量序列,在圖表中顯示(例如測量pH,電導率,安培等)。您可以將圖表縮放比例很大,因此即使是毫秒也可見。人們可以設置不同的設備詢問頻率,所以我希望圖表上的值可以按用戶設置的時間相同的毫秒數分隔。但如果這不容易,我可以忍受1毫秒的限制。不過,還是很好的瞭解如何睡眠ms的浮點數。 – Kosmos

1

Thread.Sleep不支持非整數值毫秒,因爲它沒有亞毫秒分辨率。實際上,分辨率可能會遠高於1毫秒(可能是15毫秒甚至更高,這取決於硬件)。我懷疑API設計者在決定數據類型時會考慮這一點。

順便說一下,有兩種特殊情況。

Thread.Sleep(0) - 這將導致線程屈服到具有相同或更高優先級的另一個線程。

Thread.Sleep(1) - 這將導致線程屈服於任何線程,而不管優先級如何。