需求

  使用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、国产麒麟系统)的更多相关文章

  1. 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12

    前言   开发国产应用,使用到银河麒麟V4,V10,本篇以V10记录,参照上一篇可安装V4.V7.V10三个版本,麒麟V4系自带了Qt,麒麟V10没有自带Qt,需要自己编译搭建环境.   银河麒麟V1 ...

  2. Android项目实战(四十):Andoird 7.0+ 安装APK适配

    首先看一下安装apk文件的代码 /** * 通过隐式意图调用系统安装程序安装APK */ public static void install(Context context) { Intent in ...

  3. Windows/Linux下查看系统CPU使用最高的线程

    参考:https://blog.csdn.net/qq_27818157/article/details/78688580 jstack -l 31372 > c:/31372.stack

  4. 让你的Ubuntu也能像Windows那样显示网速和CPU温度

    致力于Linux桌面操作系统的平民化,一直强迫自己完全在Ubuntu系统下进行日常的电脑使用,但是用长了时间的Windows,还是有些习惯改不过来,比如只要在下载或者看在线视频的时候就会不自觉关注网速 ...

  5. Android项目实战(四十九):Andoird 7.0+相机适配

    解决方案类似: Android项目实战(四十):Andoird 7.0+ 安装APK适配 解决方法: 一.在AndroidManifest.xml 文件中添加 四大组件之一的 <provider ...

  6. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  7. 【笔记目录2】ASP.NET Core分布式项目实战

    当前标签: ASP.NET Core分布式项目实战 共2页: 上一页 1 2  11.ClientCredential模式总结 GASA 2019-03-11 12:59 阅读:26 评论:0 10. ...

  8. Qt 5.4正式发布!引入WP,支持HTML5混合开发

    北京时间12月11日消息,Digia全资子公司The Qt Company在其 官方博客上宣布,正式发布Qt 5.4,支持HTML5混合开发,引入对于Windows Phone的支持,以及众多跨桌面. ...

  9. DBA 的效率加速器——CloudQuery v1.3.0 上线!

    好久不见! 自 CloudQuery v1.2.1 发布至今,已有月余,在此期间我们收到了很多朋友对 CloudQuery 的反馈和建议,很多朋友表达了对 v1.3.0 的期待,非常感谢. Cloud ...

  10. 新旧版本功能对比 | v1.5.0 全新升级

    Hi~社区的小伙伴们大家好呀! CloudQuery 最新 1.5.0 社区版本即将于 4月14日 发布,正式上线前,我们迫不及待与大家分享与 v1.4 相比,v1.5.0 在性能和功能上有哪些更新和 ...

随机推荐

  1. [转帖]Shell字符串拼接(连接、合并)

    http://c.biancheng.net/view/1114.html 在脚本语言中,字符串的拼接(也称字符串连接或者字符串合并)往往都非常简单,例如: 在 PHP 中,使用.即可连接两个字符串: ...

  2. [转帖]Promethues + Grafana + AlertManager使用总结

    Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示. 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取 ...

  3. 【转帖】nginx变量使用方法详解-5

    https://www.diewufeiyang.com/post/579.html 前面在 (二) 中我们已经了解到变量值容器的生命期是与请求绑定的,但是我当时有意避开了"请求" ...

  4. 【转帖】Dockerfile文件指令介绍

    https://blog.whsir.com/post-5327.html Dockerfile其实就是一个文本文件,这个文本文件名称叫Dockerfile,里面包含了一些指令(可以理解成多个指令集合 ...

  5. Opentelemetry Metrics API

    Opentelemetry Metrics API 目录 Opentelemetry Metrics API 概览 在没有安装SDK情况下的API行为 Measurements Metric Inst ...

  6. bootstrap ----- bootstrap table表格参数

    表格参数: 名称 标签 类型 默认 描述 - data-toggle String 'table' 不用写 JavaScript 直接启用表格. classes data-classes String ...

  7. Go 跟踪函数调用链,理解代码更直观

    Go 跟踪函数调用链,理解代码更直观 目录 Go 跟踪函数调用链,理解代码更直观 一.引入 二.自动获取所跟踪函数的函数名 三.增加 Goroutine 标识 四.让输出的跟踪信息更具层次感 五.利用 ...

  8. 🛠 Open Source Instant Messaging (IM) Project OpenIM Source Code

    Deploying OpenIM involves multiple components and supports various methods, including source code, D ...

  9. # github突破7k star 即时通讯(IM)开源项目OpenIM每周迭代版本发布

    v2.0已经重构完毕,架构更清晰,代码更规范,邀请各位参与OpenIM社区建设有兴趣的同学可以加我私聊. 目前侧正在业务开发,已提供更多功能,包括群管理,阅后即焚,朋友圈,标签下发等. web端体验: ...

  10. C/C++ 关于继承与多态笔记

    继承的基本语法: 继承的目的就是用于提高代码的可用性,减少代码的重复内容,高效开发. #include <iostream> using namespace std; class Base ...