首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetTickCount()实际测量的是什么?

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

Stack Overflow用户
提问于 2013-03-19 23:04:56
回答 3查看 2.1K关注 0票数 5

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

EN

回答 3

Stack Overflow用户

发布于 2013-05-08 00:34:18

您不应该将其视为测量“自”任何事情以来的时间。仅将其用作相对时钟源。换句话说,调用GetTickCount一次,然后做一些事情,然后再次调用它,然后减去。请勿使用刻度计数的绝对值。

确切的启动时间未指定,在调试Windows版本时,“启动时间”在过去被人为设置为49.7天,以暴露计时器滚动错误。

票数 15
EN

Stack Overflow用户

发布于 2013-03-19 23:10:00

由于the official documentation没有指定,您只能假设启动过程中的精确时刻并没有真正定义,并且它在不同版本的Windows上可能会有不同的工作方式。但是考虑到虚拟化和仿真,“因为按下了电源按钮”将是没有意义的。您所能期望的最一致的定义是Windows开始服务中断的时刻--系统时钟可用的最早时刻。

票数 4
EN

Stack Overflow用户

发布于 2013-05-07 22:47:25

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天。

另一种选择是使用GetSystemTimes获得所有CPU的空闲/内核/用户时间,对它们进行计数,除以CPU计数,并将其作为正常运行时间的近似值。在进行了实验后,我发现它相当不精确,并且比正常运行时间更长。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15503088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档