Winapi GetTickCount()实际测量的是什么?
我想知道Windows API实际测量的是什么?它是否测量从按下系统电源按钮开始的时间?它是否也测量引导加载程序或BIOS加载所需的时间? 我正在尝试测量Windows 7上的启动时间。因为没有指定,所以您只能假设启动期间的确切时间没有真正定义,并且在不同版本的Windows上可能会有不同的工作方式。但是,考虑到虚拟化和仿真,“既然电源按钮被按下”将是毫无意义的。您所希望的最佳一致性定义是Windows开始提供中断服务的时刻——系统时钟可用的最早时刻。GetTickCount()主要用于测量短时间间隔。GTC的零点基本上未定义 另外,从我所看到的,GTC与Winapi GetTickCount()实际测量的是什么?,winapi,Winapi,我想知道Windows API实际测量的是什么?它是否测量从按下系统电源按钮开始的时间?它是否也测量引导加载程序或BIOS加载所需的时间? 我正在尝试测量Windows 7上的启动时间。因为没有指定,所以您只能假设启动期间的确切时间没有真正定义,并且在不同版本的Windows上可能会有不同的工作方式。但是,考虑到虚拟化和仿真,“既然电源按钮被按下”将是毫无意义的。您所希望的最佳一致性定义是Windows开始提供中断服务的时刻——系统时钟可用的最早时刻。GetTickCount()主要用于测量短时
QueryPerformanceCounter()*1000/QueryPerformanceFrequency()
的值非常匹配,所以我猜这就是它在支持QPC和QPF的机器上的实现方式
现在,确定Windows正常运行时间有两个常用选项
\\.\System\System Up Time
性能计数器。当心危险。另外,根据我的测试,这种方法在Wow64下根本不起作用,PdhCollectQueryData
不返回任何数据Win32\u OperatingSystem表
运行WMI查询LastBootUpTime
值。这很重,所以您通常希望获取并缓存它。它也很脆弱,因为WMI可以以神秘的方式破坏它。最后,我看到了基于WMI的标准systeminfo
实用程序返回无效的启动时间,该启动时间已关闭超过1天GetSystemTimes
获取所有CPU的空闲/内核/用户时间,将它们相加,除以CPU计数,并将其作为正常运行时间的近似值。经过试验,我发现它相当不精确,并且比正常运行时间要长
所以,总的来说,没有简单、轻量级的方法来确定Windows上的启动或正常运行时间。没有比*nix上读取
/proc/uptime
更好的了。惊喜,惊喜。你不应该把它当作衡量“自”任何事情发生以来的时间。仅将其用作相对时钟源。换句话说,调用GetTickCount
一次,然后做一些事情,然后再次调用,然后减去。不要使用刻度计数的绝对值
确切的启动时间尚未确定,在调试Windows版本时,“启动时间”在过去被人为设置为49.7天,以暴露计时器翻转错误。
GetTickCount
什么系统????我假设这是Windows,所以这可能会有所帮助:买一个秒表,自己算算。做这个实验非常简单。“启动时间”这是什么?通电很容易发出信号,可以通过电源输出触发硬件定时器,也可以在按下电源按钮的同时按下@DavidHeffernan秒表上的“启动”按钮。启动完成的时间更难定义和衡量。由于在按下电源按钮时Windows甚至没有运行,Windows很难对此做出解释。如果您正在测量开机时间,则需要使用秒表。