首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统运行超过49天的GetTickCount

系统运行超过49天的GetTickCount
EN

Stack Overflow用户
提问于 2015-05-18 14:21:54
回答 2查看 1.5K关注 0票数 3

根据MSDN的说法,只有当系统没有连续运行49.7天时,GetTickCount API才返回系统经过的时间。如果其运行量超过该值,则返回0。

有谁有过这样的经历:这个API在运行超过49.7天的系统上返回0吗?

我需要根据GetTickCount报告的值做出一些决定,如果我发现0,我将把它当作特例,并要求用户重新启动系统。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-18 14:39:07

不要检查0;其他人已经讨论了为什么该检查有缺陷。如果您想要避免这种概括行为,请完全避免使用GetTickCount。使用GetTickCount64,或者如果您需要支持以前的Vista系统,请使用GetSystemTimeAsFileTimeQueryPerformanceCounter,它们都可以追溯到Windows2000。

对于GetSystemTimeAsFileTime,从1601年1月1日起,返回的值以100纳秒的刻度来度量,因此可以转换为毫秒,如下所示:

代码语言:javascript
复制
DWORD64 MyGetTickCount64()
{
  FILETIME ft;
  GetSystemTimeAsFileTime(&ft);
  DWORD64 ret = (DWORD64(ft.dwHighDateTime)<<32) | ft.dwLowDateTime;
  ret = ret / 10000;// convert to milliseconds.
  return ret;
}

QueryPerformanceCounter可以像这样使用:

代码语言:javascript
复制
DWORD64 MyGetTickCount64() {
  LARGE_INTEGER freq;
  QueryPerformanceFrequency(&freq);
  LARGE_INTEGER now;
  QueryPerformanceCounter(&now);
  return now.QuadPart / freq.QuadPart * 1000;
}
票数 2
EN

Stack Overflow用户

发布于 2015-05-18 14:28:04

不是的。

GetTickCount在49.7天后结束到0,但一旦结束,它就会再次开始计数。

您可能希望使用GetTickCount64 (从Vista开始就可以使用了)。如果您需要支持较旧的系统(甚至可能不支持),您可能希望使用GetSystemTimeAsFileTime。它已经几乎永远可用了(官方将其列为Windows 2000,但我认为它可能更老了)。

后两者都使用64位计数,因此滚转不是问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30305744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档