有时我需要睡非整数毫秒,但找不到这样做的方法。例如,如果我想睡半毫秒,我想这样做:
Thread.Sleep(0.5);
但不能,因为 Sleep 仅支持整数。
有时我需要睡非整数毫秒,但找不到这样做的方法。例如,如果我想睡半毫秒,我想这样做:
Thread.Sleep(0.5);
但不能,因为 Sleep 仅支持整数。
如果您的时间安排比您使用完全错误的工具来完成工作如此重要,因为
Thread.Sleep(n) 意味着阻塞当前线程至少在 n 毫秒内可能发生的时间片(或线程量子)数量。时间片的长度在不同版本/类型的 Windows 和不同的处理器上是不同的,一般在 15 到 30 毫秒之间。这意味着线程几乎可以保证在不同的计算机上阻塞超过 n 毫秒。您的线程恰好在 n 毫秒后重新唤醒的可能性几乎是不可能的。因此, Thread.Sleep 对计时毫无意义。
您可以在此处阅读所有相关信息。
注意:如果您发布您试图解决的问题
线程.睡眠
我们也许能够引导您朝着正确的方向前进
Thread.Sleep
不支持毫秒的非整数值,因为它没有亚毫秒分辨率。事实上,分辨率可能会远高于 1 毫秒(可能为 15 毫秒甚至更高,具体取决于硬件)。我怀疑 API 设计者在决定数据类型时会考虑到这一点。
顺便说一句,有两种特殊情况。
Thread.Sleep(0)
- 这将导致线程让步给另一个具有相同或更高优先级的线程。
Thread.Sleep(1)
- 这将导致线程屈服于任何线程,而不管优先级如何。