,
ConvertAuxiliaryCounterToPerformanceCounter
,
ConvertPerformanceCounterToAuxiliaryCounter
(全部定义为
realtimeapiset.h
)。并且,在内核模式(对于驱动器开发人员)中,有相应的APIKeQueryAuxiliaryCounterFrequency
,KeConvertAuxiliaryCounterToPerformanceCounter
和
KeConvertPerformanceCounterToAuxiliaryCounter
但是,什么是辅助计数器?为什么要使用一个?您如何实际阅读辅助计数器的价值?该文档没有回答任何这些问题。
但是,什么是辅助柜台?
您可以按频率确定辅助计数器,而24000000是HPET硬件计时器:
QueryAuxiliaryCounterFquency:24000000(24 MHz)
你为什么要使用一个? 有一些用例,但通常会通过网络上的多台机器的事件和时间戳记或确定系统上其他计时器的可靠性或准确性相关联。
您如何实际读取辅助计数器的值? API旨在将QPC值转换为等效AUX计数器:
将QPC转换为Aux,并使用LARGE_INTEGER performanceCounterValue; ULONG64 auxiliaryCounterValue; ULONG64 auxiliaryConversionError; QueryPerformanceCounter(&performanceCounterValue); ConvertPerformanceCounterToAuxiliaryCounter( performanceCounterValue.QuadPart, &auxiliaryCounterValue, &auxiliaryConversionError ); printf("%llu +/- %llu", auxiliaryCounterValue, auxiliaryConversionError);
对于QPC值范围为10秒的QPC值,该函数将失败。
ConvertPerformancecountToAuxiliaryCountercounter
另一方将AUX转换回QPC,并将AUX转换回QPC,Https://learn.microsoft.com/en-us/windows/win32/sysinfo/acquiring-high-resolution-resolution time-stamps#resolution-resolution-precision-precision-accuracy-accuracy-and-senation-ConvertAuxiliaryCounterToperFormanCecountancountr
,您具有AUX TIMESTAMP的高精度相关性的AUX TIMESTam文档:
使用两台不同的计算机来考虑相同的24小时时间间隔。两台计算机的振荡器具有最大频率偏移±50 ppm。这两个系统的同一时间间隔的测量可以相距多远?与前面的示例一样,±50 ppm在24小时后产生的最大误差为±4.3秒。如果一个系统快速运行4.3秒,而其他4.3秒慢,则24小时后的最大错误可能为8.6秒。
秒,一天=86400freFeCency Offset错误=±50 ppm =±0.00005
±(86,400秒 * 0.00005)=±4.3秒 两个系统之间的最大偏移= 8.6秒