【发布时间】:2009-04-07 22:59:07
【问题描述】:
如果一个线程正在做这样的事情:
const DWORD interval = 20000;
DWORD ticks = GetTickCount();
while(true)
{
DoTasksThatTakeVariableTime();
if( GetTickCount() - ticks > interval )
{
DoIntervalTasks();
ticks = GetTickCount();
}
}
最终,当值不适合 DWORD 时,滴答声将自动换行。
我一直在和一位同事讨论这个问题。我们中的一个人认为,当换行发生时,代码仍然会表现得“很好”,因为减法运算也会换行。我们中的另一个人认为它并不总是有效,尤其是在间隔很大的情况下。
谁是对的,为什么?
谢谢。
【问题讨论】:
-
您真正要问的是,当您从一个小的 DWORD 中减去一个大的 DWORD 时会发生什么。您和您的同事本可以编写一个程序来找出答案。 GetTickCount 与此无关。
-
我对 calc.exe 进行了实验,使用 dword 大小设置为十六进制模式。结果看起来它会表现得很好......但是,我的同事并不相信它会在所有情况下都有效,因此这个问题。 GetTickCount 是相关的,Jon Skeet 已经指出我们可能会使用 GetTickCount64
-
GetTickCount64() 只是将问题的规模更改为在大约 2000 亿天之后换行......你确定你的代码不会运行那么久吗? ;-)