我該怎麼做Thread.Sleep(10.4166667);?更精確Thread.Sleep
好吧,我現在看到,睡眠不是要走的路。 所以我使用計時器,但計時器也在MS把我需要更精確 是否有納秒精度的計時器?
我該怎麼做Thread.Sleep(10.4166667);?更精確Thread.Sleep
好吧,我現在看到,睡眠不是要走的路。 所以我使用計時器,但計時器也在MS把我需要更精確 是否有納秒精度的計時器?
請注意,參數是以毫秒爲單位,所以10是10毫秒。你確定要10.41等毫秒嗎?如果你想10.41秒,那麼你可以使用10416.
所以你希望你的線程在那段時間精確睡眠,然後恢復?忘掉它。該參數告訴系統在至少這個毫秒數量後喚醒線程。至少。在恢復之後,線程可以在眨眼之間再次進入休眠狀態。這就是操作系統的工作原理,你無法控制它。
請注意,Thread.Sleep
只要你告訴它(甚至不是精確地),無論前後需要執行多長時間的代碼都會睡覺。
你的問題似乎暗示你希望某些代碼在特定的時間間隔內執行,因爲精確的時間似乎很重要。因此,您可能更喜歡Timer
。
Thread.Sleep
的輸入是線程被阻塞的毫秒數。之後,它將可以運行,但是對實際排定的時間沒有影響。即在理論上,線程可能會在恢復執行之前永遠等待。
在這裏依靠特定的毫秒數幾乎沒有任何意義。如果您嘗試在兩個線程之間同步工作,則使用better options比使用睡眠。
要做這樣一個精確的睡眠,你需要使用一個實時操作系統,你可能需要專門的硬件。與其他人一樣,Integrity RTOS聲稱可以在幾納秒內響應中斷。
這不會發生在C#或任何類型的高級別睡眠呼叫中。
睡眠參數以毫秒爲單位 - 您爲什麼需要比1ms更高的精度? – 2010-10-01 08:17:09
您無法指望系統完全按指定的時間進入睡眠狀態。它只能和底層系統一樣精確(目前可能是Windows,Mac和Linux)。其實質是,你的應用程序應該可以工作,即使它睡一小時而不是一秒鐘等等(在實踐中不會發生 - 但不會少) – 2010-10-01 08:21:15
而分辨率是15ms(頂部) – 2010-10-01 08:21:57