gpt4 book ai didi

c++ - 避免循环的 timeGetTime 的最佳替代品是什么?

转载 作者:可可西里 更新时间:2023-11-01 13:27:59 27 4
gpt4 key购买 nike

timeGetTime查询系统时间似乎很好。但是,它的返回值仅为 32 位,因此它大约每 49 天回绕一次。

在调用代码中检测翻转并不难,但它增加了一些复杂性,并且(更糟的是)需要保持状态。

timeGetTime 有替代品吗?那不会有这个环绕问题(可能通过返回 64 位值),并且具有大致相同的精度和成本?

最佳答案

除非您需要为超过 49 天的事件计时,您可以安全地忽略环绕。只需始终从当前 timeGetTime() 中减去之前的 timeGetTime(),您将始终获得准确的增量测量时间,即使在回绕过程中也是如此——前提是您正在为事件计时其总持续时间少于 49 天。由于无符号模块化数学在计算机内部的工作方式,这一切都有效。

// this code ALWAYS works, even with wrap-around!
DWORD dwStart = timeGetTime();
// provided the event timed here has a duration of less than 49 days
DWORD dwDuration = timeGetTime()-dwStart;

提示:查看 TimeBeginPeriod(1L) 以提高 timeGetTime() 的准确性。

但是......如果你想要一个 64 位版本的 timeGetTime,这里是:

__int64 timeGetTime64() {
static __int64 time64=0;
// warning: if multiple threads call this function, protect with a critical section!
return (time64 += (timeGetTime()-(DWORD)time64));
}

请注意,如果此函数未至少每 49 天调用一次,则此函数将无法正确检测环绕。

关于c++ - 避免循环的 timeGetTime 的最佳替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com