c++ - 具有直接 QueryPerformanceCounter 值的时钟是否符合 C++ 标准?

标签 c++ c++11 query-performance performancecounter c++-chrono

假设我想使用直接 QueryPerformanceCounter Windows API 结果创建ClockQueryPerformanceCounter Windows API 返回一些计数器,该计数器应除以 QueryPerformanceFrequency 结果,从而生成以秒为单位的时间。

通常,基于QueryPerformanceCounterClock会通过乘以某个周期并除以QueryPerformanceFrequency来立即将结果转换为某些单位。这就是在 Windows 上实现 steady_clock 的方式。

但是假设出于性能原因,我想避免除法,直到真正需要为止。所以 time_point 是直接的 QueryPerformanceCounter 值,而 duration 是其差值。大多数时候我可以对这些值进行算术和比较,仅将最终结果转换为一些正常的durationtime_point

我确信这是可能的。我的问题是:这样的Clock是否与标准Clock完全兼容。

最佳答案

它不会与标准 Clock Requirements 完全兼容。但大多数时候它会编译并执行您想要的操作。不符合的部分是,您必须为 time_point 所基于的 period 指定某些内容。并且某些东西不一定对应于物理时间单位。

这并不重要,除非您减去其中两个 time_points,得到持续时间,然后将该持续时间所做的事情进行比较代表物理时间。然后你会得到运行时垃圾。

此外,如果您在 sleep_untilwait_until 中使用这样的 time_point,那么您的程序将不会休眠或等待预期时间.

这是一个基于QueryPerformanceCounter的示例计时时钟,它确实使用QueryPerformanceFrequency确定了物理单位:https://stackoverflow.com/a/15755865/576911

关于c++ - 具有直接 QueryPerformanceCounter 值的时钟是否符合 C++ 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60886394/

相关文章:

c++ - 处理模板中的 void 类型

c++ - 在什么情况下会在这种情况下执行死刑?

mysql - 谁能帮助我优化查询以减少结果时间?

c++ - 在线程之间发送窗口消息时出现 ESP 错误

c++ - 提高性能自定义进度条动画

c++ - 如何摆脱第三方框架(gstreamer)中的内存泄漏

c++ - std::string::erase 如何从字符串中删除字符?

mysql - 优化 - 从循环内的 TEMP TABLE 中进行选择以获取 JSON 值的平均值的函数

tsql - ROW_NUMBER() OVER PARTITION 优化

c++ - 获取没有实例的 std::bitset 的大小