赞
踩
若该文为原创文章,转载请注明出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136277231
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)
使用Qt软件开发一个检测cpu温度的功能。
兼容windows、linux,国产麒麟系统(同为linux)
windows上运行(需要管理员权限):
国产麒麟操作上运行(需要管理员权限):
CSDNf粉丝0积分下载:https://download.csdn.net/download/qq21497936/88874614
QQ群:博客首页扫码进入QQ技术群,点击“文件”搜索“monitorCpuT”,群内与博文同步更新)
#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("Core 0")) { LOG << str; QStringList subList = str.split(" ", QString::SkipEmptyParts); LOG << subList; if(subList.size() > 3) { QString s = subList.at(2); // ("Core", "0:", "+33.0°C", "(high", "=", "+80.0°C,", "crit", "=", "+100.0°C)") if(s.startsWith("+") && s.endsWith("°C")) { _t = s.mid(1, s.size() - 1 - 2).toDouble(&ok); } } break; } } #else QString str = "Core 0: +33.2°C (high = +80.0°C, crit = +100.0°C)"; if(str.contains("Core 0")) { LOG << str; QStringList subList = str.split(" ", QString::SkipEmptyParts); LOG << subList; if(subList.size() > 3) { QString s = subList.at(2); // ("Core", "0:", "+33.0°C", "(high", "=", "+80.0°C,", "crit", "=", "+100.0°C)") if(s.startsWith("+") && s.endsWith("°C")) { _t = s.mid(1, s.size() - 1 - 2).toDouble(&ok); } } } #endif // false失败 if(!ok) { emit signal_detectTemperature(false, _t); // 下一次检测 QTimer::singleShot(_intervalMs, this, SLOT(slot_loop())); return; } // 抛出温度 emit signal_detectTemperature(true, _t); #endif #endif
win10获取系统设备相关信息,需要管理员权限。
发布时:1.点击exe右键,使用管理员运行。
发布时/开发时:1.可以直接exe鼠标右键属性,勾选管理员权限运行,后面开发就可以了。
开发时:2.开发的时候,可以直接使用管理员权限打开QtCreator即可。
没有传感器输出:
因为是使用虚拟机上开发,实际是没有传感器等一些数据的,都是No。(注意:直接开发ubuntu驱动时,查看操作系统上设备树,所有寄存器地址都是0x0000000,也是一样的道理,与硬件相关的,虚拟机是模拟的,没有实际)
重新装了一台物理麒麟机,测试可以。
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136277231
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。