我有一个循环运行的代码,它根据当前时间保存状态.有时这可能只相差几毫秒,但由于某些原因,似乎DateTime.Now将始终返回至少10 ms的值,即使它仅在2或3 ms之后.这是一个主要问题,因为我保存的状态取决于它保存的时间(例如录制内容)
我的测试代码返回10 ms的每个值:
public static void Main()
{
var dt1 = DateTime.Now;
System.Threading.Thread.Sleep(2);
var dt2 = DateTime.Now;
// On my machine the values will be at least 10 ms apart
Console.WriteLine("First: {0}, Second: {1}", dt1.Millisecond, dt2.Millisecond);
}
Run Code Online (Sandbox Code Playgroud)
是否有另一种解决方案可以获得精确的当前时间到毫秒?
有人建议看秒表类.虽然秒表类是非常准确的,但它并没有告诉我当前的时间,我需要的东西是为了保存程序的状态.
Thread.Sleep()确保DateTime.Now不同的最短时间是多少?
鉴于DateTime具有Ticks属性,您可以认为以下内容就足够了:
Thread.Sleep(TimeSpan.FromTicks(1));
Run Code Online (Sandbox Code Playgroud)
这样可以,但是这可以保证后续调用DateTime.Now不相等?
更新:出现DateTime精度是硬件相关的,所以我将使用以下方法:
public static void SleepUntilDateTimeChanges()
{
DateTime now = DateTime.Now;
while(now == DateTime.Now)
Thread.Sleep(TimeSpan.FromMilliseconds(1));
}
Run Code Online (Sandbox Code Playgroud)