运行超过 49 天的系统上的 GetTickCount

hyp*_*eni 2 windows winapi

根据MSDN GetTickCount API 仅当系统没有连续运行 49.7 天时才返回系统经过时间。如果它的运行超过这个,它将返回 0。

有没有人遇到过这个API在运行超过49.7天的系统上实际返回0的事件?

我需要根据 GetTickCount 报告的值做出一些决定,如果我发现 0,我会将其视为特殊情况并要求用户重新启动系统。

Dav*_*nan 5

当滴答计数结束时,它会返回0但继续计数。所以,你可以得到的值以下顺序:4294967295012等等。与您的怀疑相反,滴答计数不会滚动到0然后永远保持在那里。在滚动后,滴答计数继续向上计数。

要求用户重新启动机器,因为您的程序不能计算超过 2 32似乎是一个相当弱的问题解决方案。您应该正确解决问题。也许使用GetTickCount64,或者确实是其他一些不会翻转的时间测量。

  • 如果您的应用程序仅处理低于 50 天的相对间隔,另一种选择是依赖模算术,例如将 `if(a < b)` 转换为 `if(a - b < 0)` 等等。 (2认同)