我想获得最准确的(1ms准确度非常好)时间。 我看到这个使用GetLocalTime的例子:
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public class SystemTime
{
public ushort year;
public ushort month;
public ushort weekday;
public ushort day;
public ushort hour;
public ushort minute;
public ushort second;
public ushort millisecond;
}
public class LibWrap
{
[DllImport("Kernel32.dll")]
public static extern void GetLocalTime([In, Out] SystemTime st);
}
public class App
{
public static void Main()
{
SystemTime st = new SystemTime();
LibWrap.GetLocalTime(st);
Console.Write("{0}:{1}:{2}.{3}", st.hour, st.minute, st.second, st.millisecond);
Console.ReadKey();
}
}
准确度是多少?
答案 0 :(得分:3)
最有可能是计时器的准确性。默认情况下为16ms(在较新版本的Windows上),使用timeBeginPeriod(1)
可以减少到1ms(可能会增加计算机的功耗)。
Windows上的所有“绝对时间”功能我知道以定时器精度工作。所以我希望它不会比DateTime.Now
更好或更差。
相对时间函数(StopWatch
,QueryPerformanceCounter
)具有更高的准确性,但没有给出有意义的绝对时间。它们还可能遇到跨多个CPU核心的同步问题。
但是你为什么不测试它:编写一个读取时间的小程序,并在它增加时打印它。对DateTime.Now
执行相同操作。并进行比较。