gpt4 book ai didi

c++ - GetTickCount() 换行时会发生什么?

转载 作者:IT老高 更新时间:2023-10-28 22:32:32 27 4
gpt4 key购买 nike

如果一个线程正在做这样的事情:

const DWORD interval = 20000;
DWORD ticks = GetTickCount();
while(true)
{
DoTasksThatTakeVariableTime();

if( GetTickCount() - ticks > interval )
{
DoIntervalTasks();
ticks = GetTickCount();
}
}

最终,当值不适合 DWORD 时,滴答声将自动换行。

我一直在和一位同事讨论这个问题。我们中的一个人认为,当换行发生时,代码仍然会表现得“很好”,因为减法运算也会换行。我们中的另一个人认为它并不总是有效,尤其是在间隔很大的情况下。

谁是对的,为什么?

谢谢。

最佳答案

来自 the docs :

The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days. To avoid this problem, use GetTickCount64. Otherwise, check for an overflow condition when comparing times.

但是,DWORD 是无符号的 - 所以你应该没问题。 0 - “非常大的数字” = “小数字”(当然,假设您没有任何溢出检查事件)。我之前的编辑建议你得到一个负数,但那是在我考虑到 DWORD 未签名之前。

如果手术需要不到 49.7 天,您仍然会遇到问题。这对你来说可能不是问题;)

一种测试方法是将 GetTickCount() 方法 stub ,这样您就可以编写单元测试,明确地将其包装起来。再说一次,如果你真的只是怀疑算术部分,你可以很容易地为此编写单元测试:) 真的,只要你知道它的行为,这个数字来自系统时钟的事实几乎是无关紧要的wraps - 并且在文档中指定。

关于c++ - GetTickCount() 换行时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727918/

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