3

有时我需要睡非整数毫秒,但找不到这样做的方法。例如,如果我想睡半毫秒,我想这样做:

Thread.Sleep(0.5);

但不能,因为 Sleep 仅支持整数。

4

2 回答 2

7

如果您的时间安排比您使用完全错误的工具来完成工作如此重要,因为

Thread.Sleep(n) 意味着阻塞当前线程至少在 n 毫秒内可能发生的时间片(或线程量子)数量。时间片的长度在不同版本/类型的 Windows 和不同的处理器上是不同的,一般在 15 到 30 毫秒之间。这意味着线程几乎可以保证在不同的计算机上阻塞超过 n 毫秒。您的线程恰好在 n 毫秒后重新唤醒的可能性几乎是不可能的。因此, Thread.Sleep 对计时毫无意义。

您可以在此处阅读所有相关信息。

注意:如果您发布您试图解决的问题

线程.睡眠

我们也许能够引导您朝着正确的方向前进

于 2013-07-26T17:42:21.703 回答
1

Thread.Sleep不支持毫秒的非整数值,因为它没有亚毫秒分辨率。事实上,分辨率可能会远高于 1 毫秒(可能为 15 毫秒甚至更高,具体取决于硬件)。我怀疑 API 设计者在决定数据类型时会考虑到这一点。

顺便说一句,有两种特殊情况。

Thread.Sleep(0)- 这将导致线程让步给另一个具有相同或更高优先级的线程。

Thread.Sleep(1)- 这将导致线程屈服于任何线程,而不管优先级如何。

于 2013-07-26T17:45:16.397 回答