3 回答
TA贡献1834条经验 获得超8个赞
你做不到 单个睡眠呼叫通常会阻塞Thread.Sleep(1)一秒以上(它取决于操作系统和系统,但以我的经验,通常会阻塞12到15毫秒之间)。
通常,Windows并非设计为实时操作系统。在Windows的普通(台式机/服务器)版本上通常无法实现这种控制。
通常可以得到的最接近的结果是旋转并消耗CPU周期,直到达到所需的等待时间(以高性能计数器衡量)。但是,这非常糟糕-您会吃光整个CPU,即使那样,您有时还是会被操作系统抢占,并有效地“睡眠”超过1毫秒...
TA贡献1765条经验 获得超5个赞
下面的代码绝对可以提供一种更精确的阻塞方法,而不是调用Thread.Sleep(x);方法(尽管此方法将阻塞线程,而不是使其进入睡眠状态)。下面,我们使用StopWatch该类来衡量我们需要保持循环并阻塞调用线程多长时间。
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 关注
- 1072 浏览
添加回答
举报