更精确的Thread.Sleep

时间:2010-10-01 08:03:33

标签: c#

我该怎么做Thread.Sleep(10.4166667);?

好的,我现在看到睡眠不是要走的路。 所以我使用Timer但计时器也在ms中,我需要更精确 是否有纳秒精度的计时器?

6 个答案:

答案 0 :(得分:4)

所以你希望你的线程准确睡眠那段时间然后恢复?忘掉它。此参数告诉系统至少在此毫秒数后唤醒线程。至少。恢复后,线程可以在眨眼之间再次进入睡眠状态。这就是操作系统如何工作而你无法控制它。

答案 1 :(得分:3)

请注意Thread.Sleep只要您告诉它(甚至不准确)就会睡觉,无论代码执行前后的代码有多长。

您的问题似乎暗示您希望某些代码在某些时间间隔内执行,因为精确的时间似乎很重要。因此,您可能更喜欢Timer

答案 2 :(得分:3)

要做到如此精确的睡眠,您需要使用实时操作系统,并且您可能需要专门的硬件。完整性RTOS声称以纳秒为单位响应中断,其他人也是如此。

C#或任何类型的高级睡眠呼叫都不会发生这种情况。

答案 3 :(得分:1)

请注意,参数以毫秒为单位,因此10为10毫秒。你确定你想要10.41等毫秒吗?如果你想要10.41秒,那么你可以使用10416。

答案 4 :(得分:1)

Thread.Sleep的输入是线程被阻塞的毫秒数。之后它将是可运行的,但是你对它实际安排的时间没有影响。即从理论上讲,线程可以在恢复执行之前永远等待。

在这里依赖特定的毫秒数几乎没有意义。如果您尝试在两个线程之间同步工作,则better options比使用Sleep更新。

答案 5 :(得分:0)

正如您已经提到的:您可以将DispatcherTimerStopwatch结合使用(确保IsHighResolutionFrequency满足您的需求)。启动计时器和秒表,然后在计时器的小心刻度上检查秒表的确切经过时间。