我试图使用Windows中的GetTickCount()来获得系统正常运行时间。我想知道这个系统运行了多久。
然而,GetTickCount的回报却是惊人的高。这个代码给了我500多个小时的正常运行时间。
这也适用于GetTickCount64()。
为什么这个值这么高?
DWORD time_ms = GetTickCount();
DWORD seconds = (time_ms / 1000) % 60;
DWORD minutes = time_ms /(1000*60) % 60;
DWORD hours = time_ms / (1000*60*60);
stringstream ss;
ss << "Hours: ";
ss << hours;
ss << " Minutes: ";
ss << minutes;
ss << " seconds: ";
ss << seconds;
MessageBoxA(0, ss.str().c_str(), "Uptime", 0);
当我运行程序时,我可以看到它正在正确地进行,但我无法理解我将如何获得我的桌面的总正常运行时间。
谢谢
编辑:我检查了CMD中的"systeminfo“的正常运行时间,发现”系统启动时间“实际上是500小时前的。所以我关掉了电脑,拔掉了电源,启动了,但是系统的启动时间还是有这么高的价值。然而,重新启动计算机使其重置,现在我的代码工作。
编辑2:这个博客https://blogs.msdn.microsoft.com/oldnewthing/20141113-00/?p=43623说GetTickCount应该用来测量时间间隔而不是我想要达到的目标。看来我得看一下注册表了。
编辑3:
在注册表中找到正确的计数器后,它具有具有GetTickCount和类似函数的相同值。在Windows中关机似乎会使它进入某种休眠状态。我没有找到任何解决办法。
发布于 2016-02-10 15:07:18
GetTickCount
的文档描述了使系统正常运行的正确方法:
若要获取自计算机启动以来所用的时间,请在注册表项HKEY_PERFORMANCE_DATA中的性能数据中检索系统启动时间计数器。返回的值为8字节值.有关更多信息,请参阅性能计数器
发布于 2016-08-22 15:40:13
我只是遇到了同样的问题。我解决它的方法是:
我想很多老程序都会再次使用W10和快速启动选项.
发布于 2016-02-10 15:05:28
500小时的正常运行时间并不特别令人惊讶。大约20天。现代系统很少关机。通常情况下,它们被暂停,而不是关闭。我想你的系统已经运行了500个小时了。
当然,您应该使用GetTickCount64
来处理64位滴答计数。这将避免由GetTickCount
返回的32位值造成的49天环绕。
https://stackoverflow.com/questions/35318521
复制相似问题