C++获取win下cpu温度,cpu占用率,内存占用率

我封装过一个类似的控件类,windows采用WIN API获取,linux上采用执行命令形式获取。
C++获取win下cpu温度,cpu占用率,内存占用率

【C++获取win下cpu温度,cpu占用率,内存占用率】 核心代码:
void CpuMemoryLabel::getCPU(){#ifdef Q_OS_WIN static FILETIME preidleTime; static FILETIME prekernelTime; static FILETIME preuserTime; FILETIME idleTime; FILETIME kernelTime; FILETIME userTime; GetSystemTimes(\u0026amp;idleTime, \u0026amp;kernelTime, \u0026amp;userTime); quint64 a, b; int idle, kernel, user; a = (preidleTime.dwHighDateTime \u0026lt;\u0026lt; 31) | preidleTime.dwLowDateTime; b = (idleTime.dwHighDateTime \u0026lt;\u0026lt; 31) | idleTime.dwLowDateTime; idle = b - a; a = (prekernelTime.dwHighDateTime \u0026lt;\u0026lt; 31) | prekernelTime.dwLowDateTime; b = (kernelTime.dwHighDateTime \u0026lt;\u0026lt; 31) | kernelTime.dwLowDateTime; kernel = b - a; a = (preuserTime.dwHighDateTime \u0026lt;\u0026lt; 31) | preuserTime.dwLowDateTime; b = (userTime.dwHighDateTime \u0026lt;\u0026lt; 31) | userTime.dwLowDateTime; user = b - a; cpuPercent = (kernel + user - idle) * 100 / (kernel + user); preidleTime = idleTime; prekernelTime = kernelTime; preuserTime = userTime ; setData();#else if (process-\u0026gt;state() == QProcess::NotRunning) { totalNew = idleNew = 0; process-\u0026gt;start("cat /proc/stat"); }#endif}void CpuMemoryLabel::getMemory(){#ifdef Q_OS_WIN MEMORYSTATUSEX statex; statex.dwLength = sizeof(statex); GlobalMemoryStatusEx(\u0026amp;statex); memoryPercent = statex.dwMemoryLoad; memoryAll = statex.ullTotalPhys / MB; memoryFree = statex.ullAvailPhys / MB; memoryUse = memoryAll - memoryFree; setData();#else if (process-\u0026gt;state() == QProcess::NotRunning) { process-\u0026gt;start("cat /proc/meminfo"); }#endif}void CpuMemoryLabel::readData(){ while (!process-\u0026gt;atEnd()) { QString s = QLatin1String(process-\u0026gt;readLine()); if (s.startsWith("cpu")) { QStringList list = s.split(" "); idleNew = list.at(5).toInt(); foreach (QString value, list) { totalNew += value.toInt(); } int total = totalNew - totalOld; int idle = idleNew - idleOld; cpuPercent = 100 * (total - idle) / total; totalOld = totalNew; idleOld = idleNew; break; } else if (s.startsWith("MemTotal")) { s = s.replace(" ", ""); s = s.split(":").at(1); memoryAll = s.left(s.length() - 3).toInt() / KB; } else if (s.startsWith("MemFree")) { s = s.replace(" ", ""); s = s.split(":").at(1); memoryFree = s.left(s.length() - 3).toInt() / KB; } else if (s.startsWith("Buffers")) { s = s.replace(" ", ""); s = s.split(":").at(1); memoryFree += s.left(s.length() - 3).toInt() / KB; } else if (s.startsWith("Cached")) { s = s.replace(" ", ""); s = s.split(":").at(1); memoryFree += s.left(s.length() - 3).toInt() / KB; memoryUse = memoryAll - memoryFree; memoryPercent = 100 * memoryUse / memoryAll; break; } } setData();}void CpuMemoryLabel::setData(){ cpuPercent = (cpuPercent \u0026lt; 0 ? 0 : cpuPercent); QString msg = QString("CPU %1% Mem %2% ( 已用 %3 MB / 共 %4 MB )") .arg(cpuPercent).arg(memoryPercent).arg(memoryUse).arg(memoryAll); this-\u0026gt;setText(msg); emit textChanged(msg); emit valueChanged(cpuPercent, memoryPercent, memoryAll, memoryUse, memoryFree);}


推荐阅读