GetTickCount()实际测量的是什么?

时间:2013-03-19 15:04:56

标签: winapi

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

3 个答案:

答案 0 :(得分:14)

你不应该把它当作衡量“自”以来的时间。仅将其用作相对时钟源。换句话说,调用GetTickCount一次,然后执行某些操作,然后再次调用,然后减去。不要使用滴答计数的绝对值。

未指定精确的开始时间,并且在Windows的调试版本中,“启动时间”过去被人为设置为49.7天,以便暴露计时器翻转错误。

答案 1 :(得分:4)

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

答案 2 :(得分: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运行Win32_OperatingSystem table值的WMI查询。这是,因此您通常希望获取并缓存它。它也很脆弱,因为WMI可以以神秘的方式打破。最后,我看到基于WMI返回无效启动时间的标准systeminfo实用程序已关闭超过1天。

  3. 另一个选择是使用GetSystemTimes来获取所有CPU的空闲/内核/用户时间,计算它们,除以CPU计数并将其作为正常运行时间的近似值。经过实验,我发现它相当不精确,产生的正常运行时间高于正常值。

    所以,总而言之,在Windows上确定启动或正常运行时间并不简单轻便。没有什么能比得上* nix上的/proc/uptime了。惊喜,惊喜。