C#的时间延迟

时间:2009-05-24 12:35:39

标签: c# .net

以下功能 System.Threading.Thread.Sleep(); 以毫秒为单位延迟线程,并将整数值作为参数。是否有任何线程延迟的方法,以微秒为单位。或者可以睡眠功能取浮动值? 感谢

4 个答案:

答案 0 :(得分:17)

不。从85122

引用Will Dean
  

你不能在如此短的时间内有意义地“睡觉”(即放弃你的预定CPU)。如果你想延迟一段时间,那么你需要旋转,反复检查一个合适的高分辨率计时器(例如'性能计时器'),并希望高优先级的东西不会先发制人。

答案 1 :(得分:10)

睡眠首先不准确到毫秒。我认为它的分辨率取决于硬件,您可以睡眠的最短时间通常为20 ms左右。这与Sleep有关,实际上释放了当前线程的时间片可能剩余的内容;并允许另一个线程运行。您的线程能够再次运行的最早时间是在一个线程调度程序时间片已经过去之后。因此,分辨率约为20 ms(假设系统上的时间片为20 ms)。

由于Windows不是实时操作系统;睡眠和其他等待功能永远不会完全确定。

根据您的应用程序,您可能会在大多数时间进行睡眠,然后在时间紧迫的情况下进行忙碌等待。或者重写结构以便您准确地测量时间(使用System.Diagnostics.Stopwatch);但不要依赖于能够在毫秒范围内准确睡眠。

first answer in this thread on MSDN也很好地解释了它。

答案 2 :(得分:1)

您将找到Thread.Sleep的最佳粒度是使用TimeSpan类。不幸的是,它支持的最小粒度是毫秒。在微秒范围内无法入睡。

答案 3 :(得分:1)

我必须编写一个音乐程序,其中音符必须以正确的持续时间开始/停止,因此我使用DirectX中的高分辨率计时器来执行此操作,但是,我的应用程序也将保持在顶部和猪cpu,所以它可以继续检查何时进行下一步操作。

由于无法准确知道操作系统何时将控制权返回给您的应用程序,因此Thread.Sleep将是一个非常糟糕的选择,如上所述,最小的时间增量可以在10到50毫秒之间变化,在我的经验。