假设我想使用直接 QueryPerformanceCounter
Windows API 结果创建Clock
。 QueryPerformanceCounter
Windows API 返回一些计数器,该计数器应除以 QueryPerformanceFrequency
结果,从而生成以秒为单位的时间。
通常,基于QueryPerformanceCounter
的Clock
会通过乘以某个周期并除以QueryPerformanceFrequency
来立即将结果转换为某些单位。这就是在 Windows 上实现 steady_clock
的方式。
但是假设出于性能原因,我想避免除法,直到真正需要为止。所以 time_point
是直接的 QueryPerformanceCounter
值,而 duration
是其差值。大多数时候我可以对这些值进行算术和比较,仅将最终结果转换为一些正常的duration
或time_point
。
我确信这是可能的。我的问题是:这样的Clock
是否与标准Clock
完全兼容。
最佳答案
它不会与标准 Clock Requirements 完全兼容。但大多数时候它会编译并执行您想要的操作。不符合的部分是,您必须为 time_point
所基于的 period
指定某些内容。并且某些东西不一定对应于物理时间单位。
这并不重要,除非您减去其中两个 time_points,得到持续时间
,然后将该持续时间
与所做的事情进行比较代表物理时间。然后你会得到运行时垃圾。
此外,如果您在 sleep_until
或 wait_until
中使用这样的 time_point
,那么您的程序将不会休眠或等待预期时间.
这是一个基于QueryPerformanceCounter
的示例计时时钟,它确实使用QueryPerformanceFrequency
确定了物理单位:https://stackoverflow.com/a/15755865/576911
关于c++ - 具有直接 QueryPerformanceCounter 值的时钟是否符合 C++ 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60886394/