如果线程正在执行以下操作:

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

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

最终,当值不适合DWORD时,刻度将结束。

我一直在和一位同事讨论这个问题。我们中的一位相信,当换行发生时,代码仍将表现得“很好”,因为减法操作也将换行。我们中的另一个人则认为这种方法并不总是有效的,特别是如果间隔很大的话。

谁是对的,为什么?

谢谢。

最佳答案

the docs:



但是,DWORD是未签名的-因此您应该可以。 0-“很大” =“很小”(当然,假设您没有任何溢出检查功能)。我以前进行过编辑,建议您得到一个负数,但这是在我考虑到DWORD是未签名的之前。

但是,如果手术时间不到49.7天,您仍然会遇到问题。对于您来说,这可能不是问题;)

一种测试方法是将GetTickCount()方法 stub ,以便您可以在显式包装它的地方编写单元测试。再说一次,如果您真的只是在怀疑算术部分,则可以轻松地为此编写单元测试:)实际上,只要您知道系统时钟的行为,那么这个数字实际上是无关紧要的。包装-并在文档中指定。

10-08 06:53