根据MSDN的说法,只有当系统没有连续运行49.7天时,GetTickCount API才返回系统经过的时间。如果其运行量超过该值,则返回0。
有谁有过这样的经历:这个API在运行超过49.7天的系统上返回0吗?
我需要根据GetTickCount报告的值做出一些决定,如果我发现0,我将把它当作特例,并要求用户重新启动系统。
发布于 2015-05-18 14:39:07
不要检查0;其他人已经讨论了为什么该检查有缺陷。如果您想要避免这种概括行为,请完全避免使用GetTickCount。使用GetTickCount64,或者如果您需要支持以前的Vista系统,请使用GetSystemTimeAsFileTime或QueryPerformanceCounter,它们都可以追溯到Windows2000。
对于GetSystemTimeAsFileTime,从1601年1月1日起,返回的值以100纳秒的刻度来度量,因此可以转换为毫秒,如下所示:
DWORD64 MyGetTickCount64()
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
DWORD64 ret = (DWORD64(ft.dwHighDateTime)<<32) | ft.dwLowDateTime;
ret = ret / 10000;// convert to milliseconds.
return ret;
}QueryPerformanceCounter可以像这样使用:
DWORD64 MyGetTickCount64() {
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
LARGE_INTEGER now;
QueryPerformanceCounter(&now);
return now.QuadPart / freq.QuadPart * 1000;
}发布于 2015-05-18 14:28:04
不是的。
GetTickCount在49.7天后结束到0,但一旦结束,它就会再次开始计数。
您可能希望使用GetTickCount64 (从Vista开始就可以使用了)。如果您需要支持较旧的系统(甚至可能不支持),您可能希望使用GetSystemTimeAsFileTime。它已经几乎永远可用了(官方将其列为Windows 2000,但我认为它可能更老了)。
后两者都使用64位计数,因此滚转不是问题。
https://stackoverflow.com/questions/30305744
复制相似问题