项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)
需求
使用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("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
入坑
入坑一:windows获取不到输出
问题

原因
win10获取系统设备相关信息,需要管理员权限。
解决
发布时:1.点击exe右键,使用管理员运行。
发布时/开发时:1.可以直接exe鼠标右键属性,勾选管理员权限运行,后面开发就可以了。
开发时:2.开发的时候,可以直接使用管理员权限打开QtCreator即可。
入坑二:linux获取不到温度
问题
没有传感器输出:

原因
因为是使用虚拟机上开发,实际是没有传感器等一些数据的,都是No。(注意:直接开发ubuntu驱动时,查看操作系统上设备树,所有寄存器地址都是0x0000000,也是一样的道理,与硬件相关的,虚拟机是模拟的,没有实际)
解决
重新装了一台物理麒麟机,测试可以。

项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)的更多相关文章
- 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12
前言 开发国产应用,使用到银河麒麟V4,V10,本篇以V10记录,参照上一篇可安装V4.V7.V10三个版本,麒麟V4系自带了Qt,麒麟V10没有自带Qt,需要自己编译搭建环境. 银河麒麟V1 ...
- Android项目实战(四十):Andoird 7.0+ 安装APK适配
首先看一下安装apk文件的代码 /** * 通过隐式意图调用系统安装程序安装APK */ public static void install(Context context) { Intent in ...
- Windows/Linux下查看系统CPU使用最高的线程
参考:https://blog.csdn.net/qq_27818157/article/details/78688580 jstack -l 31372 > c:/31372.stack
- 让你的Ubuntu也能像Windows那样显示网速和CPU温度
致力于Linux桌面操作系统的平民化,一直强迫自己完全在Ubuntu系统下进行日常的电脑使用,但是用长了时间的Windows,还是有些习惯改不过来,比如只要在下载或者看在线视频的时候就会不自觉关注网速 ...
- Android项目实战(四十九):Andoird 7.0+相机适配
解决方案类似: Android项目实战(四十):Andoird 7.0+ 安装APK适配 解决方法: 一.在AndroidManifest.xml 文件中添加 四大组件之一的 <provider ...
- Linux运维企业架构项目实战系列
Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...
- 【笔记目录2】ASP.NET Core分布式项目实战
当前标签: ASP.NET Core分布式项目实战 共2页: 上一页 1 2 11.ClientCredential模式总结 GASA 2019-03-11 12:59 阅读:26 评论:0 10. ...
- Qt 5.4正式发布!引入WP,支持HTML5混合开发
北京时间12月11日消息,Digia全资子公司The Qt Company在其 官方博客上宣布,正式发布Qt 5.4,支持HTML5混合开发,引入对于Windows Phone的支持,以及众多跨桌面. ...
- DBA 的效率加速器——CloudQuery v1.3.0 上线!
好久不见! 自 CloudQuery v1.2.1 发布至今,已有月余,在此期间我们收到了很多朋友对 CloudQuery 的反馈和建议,很多朋友表达了对 v1.3.0 的期待,非常感谢. Cloud ...
- 新旧版本功能对比 | v1.5.0 全新升级
Hi~社区的小伙伴们大家好呀! CloudQuery 最新 1.5.0 社区版本即将于 4月14日 发布,正式上线前,我们迫不及待与大家分享与 v1.4 相比,v1.5.0 在性能和功能上有哪些更新和 ...
随机推荐
- [转帖]Elasticsearch-sql 用SQL查询Elasticsearch
https://www.cnblogs.com/kangoroo/p/7273493.html https://www.cnblogs.com/kangoroo/p/7273493.html Elas ...
- [转帖]jemalloc内存分配算法
https://www.cnblogs.com/xiaojiesir/p/15450732.html jemalloc内存分配算法简介 jemalloc 是由 Jason Evans 在 FreeBS ...
- [转贴]英特尔Sapphire Rapids至强可扩展CPU完整型号爆料与路线图展望
2022-10-13 15:15· 稿源: cnbeta 腾讯云服务器促销:2核2G首年仅需40元 历史新低 @结城安穗-YuuKi_AnS 刚刚在社交媒体上,分享了与英特尔下一代 Sapph ...
- 定位解析一个因脚本劫持导致webpack动态加载异常的问题
问题描述 项目现场的前端项目在点击顶部的导航栏切换不同的模块时,会有小概率出现模块加载报错的情况: 我们的前端项目里是有基于react-loadable做的懒加载的,上图的12.be789340.ch ...
- 文件上传change事件只执行一次的问题
参考地址:https://blog.csdn.net/john_xiaoweige/article/details/81392110 本节中的注意点: this.$refs.attenceInput. ...
- 【JS 逆向百例】网洛者反爬练习平台第七题:JSVMPZL 初体验
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...
- (数据科学学习手札76)基于Python的拐点检测——以新冠肺炎疫情数据为例
本文对应代码.数据及文献资料已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes,对代码不感兴趣的朋友可以直接跳至2.2 探 ...
- Sqlite管理工具
! https://zhuanlan.zhihu.com/p/375188242 SQLiteStudio 开源免费的一款sqlite数据库管理软件,支持windows,linux,macos 官网: ...
- TienChin 渠道管理-权限分配
添加权限 如果您不想手动添加可以使用我如下的SQL,但是有一个注意点就是 parent_id 是渠道管理菜单的主键 id 即可一键插入. INSERT INTO `TienChin`.`sys_men ...
- 多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】
相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...