如果线程正在执行以下操作:
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 ,以便您可以在显式包装它的地方编写单元测试。再说一次,如果您真的只是在怀疑算术部分,则可以轻松地为此编写单元测试:)实际上,只要您知道系统时钟的行为,那么这个数字实际上是无关紧要的。包装-并在文档中指定。