我试图使用WindowsAPI中的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”检查了正常运行时间,发现“system boot time”实际上大约在500小时前。所以我关掉电脑,拔掉电源,启动,但系统启动时间还是有这么高的价值。但是,重新启动计算机使它复位,现在我的代码工作了。
编辑2:
这个博客指出gettickcount应该被用来测量时间间隔,而不是我想要达到的目标。好像我得看看登记处。
编辑3:
在注册表中找到正确的计数器后,它具有相同的gettickcount值和类似的函数。似乎在windows中关闭会让它进入某种休眠状态。我还没有找到解决办法。

最佳答案

GetTickCount的文档描述了获得系统启动时间的正确方法:
要获取自计算机启动以来经过的时间,请检索
注册表项中性能数据中的系统启动时间计数器
香港大学绩效数据。返回的值是一个8字节的值。为了更多
信息,请参见Performance Counters

关于c++ - Windows 10上的GetTickCount值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35997227/

10-11 02:15