我想知道Windows API GetTickCount()实际测量的是什么?它是否测量从按下系统电源按钮的瞬间开始的时间?它是否也测量引导加载程序或BIOS加载所需的时间?我正在尝试测量Windows 7的启动时间。
发布于 2013-05-08 00:34:18
您不应该将其视为测量“自”任何事情以来的时间。仅将其用作相对时钟源。换句话说,调用GetTickCount一次,然后做一些事情,然后再次调用它,然后减去。请勿使用刻度计数的绝对值。
确切的启动时间未指定,在调试Windows版本时,“启动时间”在过去被人为设置为49.7天,以暴露计时器滚动错误。
发布于 2013-03-19 23:10:00
由于the official documentation没有指定,您只能假设启动过程中的精确时刻并没有真正定义,并且它在不同版本的Windows上可能会有不同的工作方式。但是考虑到虚拟化和仿真,“因为按下了电源按钮”将是没有意义的。您所能期望的最一致的定义是Windows开始服务中断的时刻--系统时钟可用的最早时刻。
发布于 2013-05-07 22:47:25
GetTickCount()主要用于测量短时间间隔。GTC的零点基本上是不确定的。
此外,据我所见,GTC与QueryPerformanceCounter() * 1000 / QueryPerformanceFrequency()的值非常接近,所以我猜这就是它在支持QPC和QPF的机器上实现的方式。
现在,有两个常用选项可用于确定Windows正常运行时间。
\\.\System\System Up Time性能计数器。当心caveats on non-English boxes。此外,根据我的测试,这种方法在Wow64下根本不起作用,因为PdhCollectQueryData返回NO_DATA。LastBootUpTime查询,从Win32_OperatingSystem table获取WMI值。这很繁重,所以你通常会想要获取它并缓存它。它也很脆弱,因为WMI可能会以神秘的方式崩溃。最后,我看到基于WMI的标准systeminfo实用程序返回无效的启动时间,启动时间相差超过1天。另一种选择是使用GetSystemTimes获得所有CPU的空闲/内核/用户时间,对它们进行计数,除以CPU计数,并将其作为正常运行时间的近似值。在进行了实验后,我发现它相当不精确,并且比正常运行时间更长。
因此,总而言之,在Windows上没有简单和轻量级的方法来确定启动或正常运行时间。没有什么可以与在*nix上读取/proc/uptime相比。惊喜,惊喜。
https://stackoverflow.com/questions/15503088
复制相似问题