2013-03-19 61 views
5

我想知道Windows API GetTickCount()实际测量的是什么?它是否从系统的电源按钮被按下时开始测量时间?它是否会测量引导加载程序或BIOS加载的时间? 我试图测量Windows 7上的启动时间。GetTickCount()实际测量什么?

+1

'GetTickCount'什么系统???? http://en.wikipedia.org/wiki/GetTickCount – leppie 2013-03-19 15:05:45

+0

我认为这是Windows,所以这可能有所帮助:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v= vs.85%29.aspx – kainaw 2013-03-19 15:06:56

+0

获取秒表并自行解决。做实验非常简单。 – 2013-03-19 15:15:51

回答

4

由于the official documentation未指定,因此您只能假定启动过程中的精确时刻并未真正定义,并且它可能在不同版本的Windows上运行不同。但考虑到虚拟化和仿真,“因为电源按钮被推动”将毫无意义。您希望的最佳一致定义是Windows开始提供中断服务的时刻 - 系统时钟可用的最早时刻。

0

GetTickCount()主要用于测量时间间隔。 GTC的零点基本上是未定义的。

另外,从我所看到的,GTC非常接近QueryPerformanceCounter() * 1000/QueryPerformanceFrequency()的值,所以我猜这就是它在支持QPC和QPF的机器上的实现方式。

现在,确定Windows正常运行时间有两种常用选项。

  1. 查询\\.\System\System Up Time性能计数器。谨防caveats on non-English boxes。另外,根据我的测试,这种方法在Wow64下不起作用,PdhCollectQueryData返回NO_DATA。

  2. 针对LastBootUpTime运行WMI查询,其值为Win32_OperatingSystem table。这是沉重的,所以你通常想得到它并缓存它。这也是脆弱的,因为WMI可以用神秘的方式打破。最后,我看到基于WMI的标准systeminfo实用程序返回的无效启动时间已超过1天。

另一种选择是使用GetSystemTimes让所有CPU的空闲/内核/用户的时间,由CPU计数不符起来,分而采取的正常运行时间的近似值。经过试验,我发现它不太精确,产生的正常运行时间高于正常。

因此,总而言之,没有简单轻量级的方法来确定Windows的启动时间或正常运行时间。在nix上没有什么可比的/proc/uptime。惊喜,惊喜。

14

你不应该把它当作测量时间“自”以来的任何事情。仅将它用作相对时钟源。换句话说,拨打GetTickCount一次,然后做一些事情,然后再调用它,然后减去。不要使用滴答计数的绝对值。

准确的开始时间没有指定,并且在调试Windows版本时,过去为了暴露定时器翻转错误,“引导时间”被人为设置为49.7天。