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

Winapi GetTickCount()实际测量的是什么?,winapi,Winapi,我想知道Windows API实际测量的是什么?它是否测量从按下系统电源按钮开始的时间?它是否也测量引导加载程序或BIOS加载所需的时间? 我正在尝试测量Windows 7上的启动时间。因为没有指定,所以您只能假设启动期间的确切时间没有真正定义,并且在不同版本的Windows上可能会有不同的工作方式。但是,考虑到虚拟化和仿真,“既然电源按钮被按下”将是毫无意义的。您所希望的最佳一致性定义是Windows开始提供中断服务的时刻——系统时钟可用的最早时刻。GetTickCount()主要用于测量短时

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

因为没有指定,所以您只能假设启动期间的确切时间没有真正定义,并且在不同版本的Windows上可能会有不同的工作方式。但是,考虑到虚拟化和仿真,“既然电源按钮被按下”将是毫无意义的。您所希望的最佳一致性定义是Windows开始提供中断服务的时刻——系统时钟可用的最早时刻。

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

另外,从我所看到的,GTC与
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很难对此做出解释。如果您正在测量开机时间,则需要使用秒表。