在Win32 API中,有一个函数Query PerformanceCounter,用于查询非常高分辨率的性能计时器的值. 什么是“高分辨率性能计时器”?它是否受硬件支持?什么系统不支持它? 在目前这一代处理器的
什么是“高分辨率性能计时器”?它是否受硬件支持?什么系统不支持它?
在目前这一代处理器的Windows 7下,这是CPU(HPET)内部可靠的高精度(纳秒)计时器.在以前的版本和前几代处理器中,它是“某种东西”,几乎可以说是任何东西.最常见的是,它是RDTSC指令返回的值(或非x86上的等效值),它可能是也可能不是可靠的,与时钟无关.请注意,RDTSC(最初,根据定义,但现在不再是)不测量时间,它测量周期.
在当前和上一代CPU上,RDTSC通常是可靠的,并且与时钟无关(即,它现在真正在测量时间),在前一代,特别是在移动或某些多CPU设备上,它不是. “定时器”可以加速和减速,甚至在不同的CPU上不同,导致“时间旅行”.
编辑:cpuid(0x80000007)中的常量tsc标志可用于判断RDTSC是否可靠(虽然这并不能解决问题,因为如果没有,如果没有其他选择该怎么办… ).
在较旧的系统(如8-10岁)上,其他一些计时器可用于QueryPerformanceCounter.那些可能既没有高分辨率,也没有非常准确.