大佬教程收集整理的这篇文章主要介绍了c – 为什么在Windows上没有具有microsec分辨率的boost :: date_time?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Stackoverflow上有一些问题/答案说明这一点并链接文档,但没有解释为什么会这样:
> Stackoverflow #1
> Stackoverflow #2
似乎有办法在Windows上实现微秒分辨率:
> GetSystemTimePreciseAsFileTime(Win8)
> QueryPerformanceCounter
我感兴趣的是为什么Boost以这种方式实现它,反过来又有可能解决方案更合适?
QueryPerformanceCounter的功能再次取决于平台特定的细节(HPET,ACPI PM计时器,不变TSC等).有关详细信息,请参见MSDN: Acquiring high-resolution time stamps和SO: Is QueryPerformanceFrequency acurate when using HPET?.
各种版本的Windows都有特定的方案来更新系统时间. Windows XP具有固定的文件时间粒度,这与系统计时器分辨率无关.只有发布Windows XP版本才允许通过更改系统计时器分辨率来修改系统时间粒度.
这可以通过多媒体计时器API timeBeginPeriod和/或隐藏的API NtSetTimerResolution来实现(有关使用`的更多详细信息,请参阅this SO answer).
timeBeginPeriod和NtSetTimerResolution).
如上所述,GetSystemTimePreciseAsFileTime仅适用于桌面应用程序.原因是需要特定的硬件.
我感兴趣的是为什么Boost以这种方式实现它,反过来又有可能解决方案更合适?
采用上述事实将使实施非常复杂,结果非常具体.每个(!)Windows版本都经历了严重的时间更改.即使从8到8.1的最新小步骤也大大改变了计时程序.但是,在Windows上仍有进一步改善时间问题的空间.
我应该提一下,从Windows 8.1开始,GetSystemTimePreciseAsFileTime没有给出预期的结果或在MSDN: GetSystemTimePreciseAsFileTime function指定的结果.它将系统文件时间与QueryPerformanceCounter的结果相结合,以填补连续文件时间增量之间的差距,但它不需要系统时间调整考虑在内.有效的系统时间调整,例如,由SetSystemTimeAdjustment完成,修改系统时间粒度和系统时间的进度.但是,用于构建GetSystemTimePreciseAsFileTime结果的已使用性能计数器频率保持不变.结果,微秒部分被SetSystemTimeAdjustment设置的调整增益关闭.
以上是大佬教程为你收集整理的c – 为什么在Windows上没有具有microsec分辨率的boost :: date_time?全部内容,希望文章能够帮你解决c – 为什么在Windows上没有具有microsec分辨率的boost :: date_time?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。