2010-10-01 61 views
1

我該怎麼做Thread.Sleep(10.4166667);?更精確Thread.Sleep

好吧,我現在看到,睡眠不是要走的路。 所以我使用計時器,但計時器也在MS把我需要更精確 是否有納秒精度的計時器?

+1

睡眠參數以毫秒爲單位 - 您爲什麼需要比1ms更高的精度? – 2010-10-01 08:17:09

+1

您無法指望系統完全按指定的時間進入睡眠狀態。它只能和底層系統一樣精確(目前可能是Windows,Mac和Linux)。其實質是,你的應用程序應該可以工作,即使它睡一小時而不是一秒鐘等等(在實踐中不會發生 - 但不會少) – 2010-10-01 08:21:15

+3

而分辨率是15ms(頂部) – 2010-10-01 08:21:57

回答

1

請注意,參數是以毫秒爲單位,所以10是10毫秒。你確定要10.41等毫秒嗎?如果你想10.41秒,那麼你可以使用10416.

4

所以你希望你的線程在那段時間精確睡眠,然後恢復?忘掉它。該參數告訴系統在至少這個毫秒數量後喚醒線程。至少。在恢復之後,線程可以在眨眼之間再次進入休眠狀態。這就是操作系統的工作原理,你無法控制它。

3

請注意,Thread.Sleep只要你告訴它(甚至不是精確地),無論前後需要執行多長時間的代碼都會睡覺。

你的問題似乎暗示你希望某些代碼在特定的時間間隔內執行,因爲精確的時間似乎很重要。因此,您可能更喜歡Timer

1

Thread.Sleep的輸入是線程被阻塞的毫秒數。之後,它將可以運行,但是對實際排定的時間沒有影響。即在理論上,線程可能會在恢復執行之前永遠等待。

在這裏依靠特定的毫秒數幾乎沒有任何意義。如果您嘗試在兩個線程之間同步工作,則使用better options比使用睡眠。

3

要做這樣一個精確的睡眠,你需要使用一個實時操作系統,你可能需要專門的硬件。與其他人一樣,Integrity RTOS聲稱可以在幾納秒內響應中斷。

這不會發生在C#或任何類型的高級別睡眠呼叫中。