【发布时间】:2010-10-13 00:46:50
【问题描述】:
Thread.Sleep() 确保 DateTime.Now 不同所需的最短时间是多少?
鉴于 DateTime 具有 Ticks 属性,您可以争辩以下内容就足够了:
Thread.Sleep(TimeSpan.FromTicks(1));
这很好,但是这保证对 DateTime.Now 的后续调用不相等吗?
更新: 似乎 DateTime 精度取决于硬件,因此我将使用以下方法:
public static void SleepUntilDateTimeChanges()
{
DateTime now = DateTime.Now;
while(now == DateTime.Now)
Thread.Sleep(TimeSpan.FromMilliseconds(1));
}
【问题讨论】:
-
这有一种不好的代码味道。你能解释一下为什么你首先要做这件奇怪的事情吗?可能有更好的方法来解决您的问题。
-
是的,它用于测试用例。我需要确保在发生某些事情时不会更新用于表示时间戳的 DateTime 属性。所以,我有一些代码 AssertAreEqual(date1, date2);但是我需要确保这不会仅仅因为测试运行器跑得非常快而通过。我必须承认代码本身有点味道,但在使用它的上下文中它是可以的。我不想把 Sleep(100) 放在任何地方,因为它会减慢测试运行速度。
-
Thread.Sleep 的分辨率约为 30-50 毫秒。睡得少那通常是无稽之谈。您最好使用高频计时器并等待 1 毫秒的滴答声,或者使用比 DateTime 更好的时间容器。
-
也在做同样的事情。另见:stackoverflow.com/questions/508208/…