项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)

人生乱弹 2年前 (2024) admin
7 0

需求

  使用Qt软件开发一个检测cpu温度的功能。
  兼容windows、linux,国产麒麟系统(同为linux)

Demo

  windows上运行(需要管理员权限):
  

  国产麒麟操作上运行(需要管理员权限):
  

 

功能描述 v1.1.0

windows上定时检测输出cpu温度。
linux上定时检测输出cpu温度。
国产银河麒麟操作系统上输出cpu温度。

 

模块化部署

  

 

关键源码

#ifndef LINUX
QString cmd = QString("wmic /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature");

QProcess process;
process.start(cmd);
process.waitForFinished();

QString result = process.readAllStandardOutput();
LOG << result;

result = result.replace("\r", "");
LOG << result;

QStringList list = result.split("\n", QString::SkipEmptyParts);
LOG << list;

bool ok = false;
int t = 0;
for(int index = 0; index < list.size(); index++)
{
QString str = list.at(index);
str = str.trimmed();
LOG << str;
t = str.toInt(&ok);
if(ok)
{
break;
}
}
// false失败
if(!ok)
{
emit signal_detectTemperature(false, _t);
// 下一次检测
QTimer::singleShot(_intervalMs, this, SLOT(slot_loop()));
return;
}

// 转换
_t = (t - 2732) * 1.0f / 10;

// 抛出温度
emit signal_detectTemperature(true, _t);

#else

// sensors,有些电脑可能没安装,安装方法如下:
// sudo apt-get install lm-sensors hddtemp
// sudo sensors-detect
// sensors

QProcess process;
process.start("sensors");
process.waitForFinished();

QString result = process.readAllStandardOutput();
LOG << result;

result = result.replace("\r","");
LOG << result;

bool ok = false;
QStringList list = result.split("\n", QString::SkipEmptyParts);
LOG << list;
#if 1
for(int index = 0; index < list.size(); index++)
{
QString str = list.at(index);
// 注意:
// 1.虚拟机是无法获取温度的
// Physical id 0: +39.0°C (high = +80.0°C, crit = +100.0°C)
// Core 0: +33.0°C (high = +80.0°C, crit = +100.0°C)
// Core 1: +35.0°C (high = +80.0°C, crit = +100.0°C)
// Core 2: +36.0°C (high = +80.0°C, crit = +100.0°C)
// Core 3: +39.0°C (high = +80.0°C, crit = +100.0°C)
if(str.contains(

文章来源

相关文章

本站主题由 OneNav 一为主题强力驱动