3 回答

TA貢獻1834條經(jīng)驗 獲得超8個贊
你做不到 單個睡眠呼叫通常會阻塞Thread.Sleep(1)一秒以上(它取決于操作系統(tǒng)和系統(tǒng),但以我的經(jīng)驗,通常會阻塞12到15毫秒之間)。
通常,Windows并非設(shè)計為實時操作系統(tǒng)。在Windows的普通(臺式機/服務(wù)器)版本上通常無法實現(xiàn)這種控制。
通常可以得到的最接近的結(jié)果是旋轉(zhuǎn)并消耗CPU周期,直到達到所需的等待時間(以高性能計數(shù)器衡量)。但是,這非常糟糕-您會吃光整個CPU,即使那樣,您有時還是會被操作系統(tǒng)搶占,并有效地“睡眠”超過1毫秒...

TA貢獻1765條經(jīng)驗 獲得超5個贊
下面的代碼絕對可以提供一種更精確的阻塞方法,而不是調(diào)用Thread.Sleep(x);方法(盡管此方法將阻塞線程,而不是使其進入睡眠狀態(tài))。下面,我們使用StopWatch該類來衡量我們需要保持循環(huán)并阻塞調(diào)用線程多長時間。
using System.Diagnostics;
private static void NOP(double durationSeconds)
{
var durationTicks = Math.Round(durationSeconds * Stopwatch.Frequency);
var sw = Stopwatch.StartNew();
while (sw.ElapsedTicks < durationTicks)
{
}
}
用法示例,
private static void Main()
{
NOP(5); // Wait 5 seconds.
Console.WriteLine("Hello World!");
Console.ReadLine();
}
- 3 回答
- 0 關(guān)注
- 1108 瀏覽
添加回答
舉報