052-第三代软件开发-系统监测

news2025/1/21 6:24:08
头图

第三代软件开发-系统监测

文章目录

  • 第三代软件开发-系统监测
    • 项目介绍
    • 系统监测

关键字: QtQmlcpu内存、memory`

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

系统监测

这个其实是一个临时起意,不属于原本的圆形设计,就是什么呢,我们的程序在启动后,是会置顶全品显示,则就导致我们想看系统CPU占用率和内存使用率变得空难,也不是不可以,就是得再接一块屏幕出来,所以就加了一个功能。代码如下

头文件

#ifndef XXXX_SYSTEMINFOR_H
#define XXXX_SYSTEMINFOR_H

#include <QObject>
#include <QTimer>
class XXXX_SystemInfor : public QObject
{
    Q_OBJECT
    Q_PROPERTY(double cpuRate READ cpuRate WRITE setCpuRate NOTIFY cpuRateChanged FINAL)                       // CPU使用率
    Q_PROPERTY(double memoryUseed READ memoryUseed WRITE setMemoryUseed NOTIFY memoryUseedChanged FINAL)        // 内存使用
    Q_PROPERTY(double memoryTotal READ memoryTotal WRITE setMemoryTotal NOTIFY memoryTotalChanged FINAL)        // 内存总量

public:
    explicit XXXX_SystemInfor(QObject *parent = nullptr);

    ~XXXX_SystemInfor();

    static XXXX_SystemInfor *getInstance();

    double cpuRate() const;
    void setCpuRate(double newCpuRate);

    double memoryUseed() const;
    void setMemoryUseed(double newMemoryUseed);

    double memoryTotal() const;
    void setMemoryTotal(double newMemoryTotal);

signals:

    void cpuRateChanged();

    void memoryUseedChanged();

    void memoryTotalChanged();

protected:

    void getCpuRate();

    void getMemoryRate();
private:
    QTimer*                             m_getSysInfor                                   = nullptr;
    double                              m_cpuRate                                       = 0;
    double                              m_memoryUseed                                   = 0;
    double                              m_memoryTotal                                   = 0;
};

#endif // XXXX_SYSTEMINFOR_H

源文件


#include "XXXX_systeminfor.h"
#include "qdebug.h"
#include "qprocess.h"
#include <unistd.h>
Q_GLOBAL_STATIC(XXXX_SystemInfor,XXXX_SystemInfor)          // 单例宏
XXXX_SystemInfor::XXXX_SystemInfor(QObject *parent)
    : QObject{parent}
{
    m_getSysInfor = new QTimer(this);
    m_getSysInfor->setInterval(1000 * 2);
    connect(m_getSysInfor,&QTimer::timeout,this,[=](){
        getCpuRate();
        getMemoryRate();
    });
    m_getSysInfor->start();
}
/**
 * @brief XXXX_SystemInfor::~XXXX_SystemInfor
 * 析构函数
 */
XXXX_SystemInfor::~XXXX_SystemInfor()
{
    m_getSysInfor->stop();
}
/**
 * @brief XXXX_SystemInfor::getInstance
 * @return
 * 获取单例
 */
XXXX_SystemInfor *XXXX_SystemInfor::getInstance()
{
    return XXXX_SystemInfor;
}
/**
 * @brief XXXX_SystemInfor::cpuRate
 * @return
 * 获取cpu使用率
 * linux下使用mpstat命令获取
 * sudo apt-get install sysstat
 * V 2.0 使用top命令获取
 * V 2.1 使用sar命令获取
 * 最终使用V 1.0版本
 */
void XXXX_SystemInfor::getCpuRate()
{
#ifdef Q_OS_LINUX

//    QProcess process;
//    /// 使用mpstat命令获取CPU使用率
//    QString program = "sar";
//    QStringList arguments;
//    /// 获取所有CPU核心的使用率
//    arguments << "-u"<< "1" << "1";
//    process.start(program, arguments);
//    /// 等待进程完成
//    process.waitForFinished();

//    process.readLine();
//    process.readLine();
//    process.readLine();
//    process.readLine();
//    QString str = process.readLine();
//    str.replace("\n","");
//    str.replace(QRegExp("( ){1,}")," ");
//    auto lst = str.split(" ");



//    if(lst.size() > 6)
//    {

//        if(lst.last().toDouble() > 0)
//            setCpuRate(100.00 - lst.last().toDouble());
//        //        qDebug() << lst.at(7).toDouble();
//    }






//    QProcess process;
//    /// 使用mpstat命令获取CPU使用率
//    QString program = "top";
//    QStringList arguments;
//    /// 获取所有CPU核心的使用率
//    arguments << "-b"<< "-n" << "1" << "-i" << "-c";
//    process.start(program, arguments);
//    /// 等待进程完成
//    process.waitForFinished();

//    process.readLine();
//    process.readLine();
//    QString str = process.readLine();
//    str.replace("\n","");
//    str.replace(QRegExp("( ){1,}")," ");
//    auto lst = str.split(" ");
//    if(lst.size() > 10)
//    {
//        if(lst.at(7).toDouble() > 0)
//            setCpuRate(100.00 - lst.at(7).toDouble());
        qDebug() << lst.at(7).toDouble();
//    }




    QProcess process;
    /// 使用mpstat命令获取CPU使用率
    QString program = "/usr/bin/mpstat";
    QStringList arguments;
    /// 获取所有CPU核心的使用率
    arguments << "-P" << "ALL";
    process.start(program, arguments);
    /// 等待进程完成
    process.waitForFinished();
    process.readLine();
    process.readLine();
    process.readLine();
    QString str = process.readLine();
    str.replace("\n","");
    str.replace(QRegExp("( ){1,}")," ");
    auto lst = str.split(" ");
    if(lst.size() > 10)
        setCpuRate(100.0 - lst.last().toDouble());


#endif
}


/**
 * @brief XXXX_SystemInfor::getMemoryRate
 * @return
 * 获取内存使用率
 */
void XXXX_SystemInfor::getMemoryRate()
{

#ifdef Q_OS_LINUX
    QProcess process;
    /// 使用free完成获取
    process.start("free -m");
    process.waitForFinished();
    process.readLine();
    QString str = process.readLine();
    str.replace("\n","");
        /// 将连续空格替换为单个空格 用于分割
    str.replace(QRegExp("( ){1,}")," ");
    auto lst = str.split(" ");
    if(lst.size() > 6)
    {
        setMemoryTotal(lst[1].toDouble());
        setMemoryUseed(lst[1].toDouble() - lst[6].toDouble());
    }
#endif
}

/**
 * @brief XXXX_SystemInfor::setMemoryRate
 * @param newMemoryRate
 * CPU 使用率
 */
double XXXX_SystemInfor::cpuRate() const
{
    return m_cpuRate;
}
/**
 * @brief XXXX_SystemInfor::setCpuRate
 * @param newCpuRate
 * 设置 CPU 使用率
 */
void XXXX_SystemInfor::setCpuRate(double newCpuRate)
{

    //    if (qFuzzyCompare(m_cpuRate, newCpuRate))
    //        return;
    m_cpuRate = newCpuRate;
    emit cpuRateChanged();
}

double XXXX_SystemInfor::memoryUseed() const
{
    return m_memoryUseed;
}

void XXXX_SystemInfor::setMemoryUseed(double newMemoryUseed)
{
    //    if (qFuzzyCompare(m_memoryUseed, newMemoryUseed))
    //        return;
    m_memoryUseed = newMemoryUseed;
    emit memoryUseedChanged();
}

double XXXX_SystemInfor::memoryTotal() const
{
    return m_memoryTotal;
}

void XXXX_SystemInfor::setMemoryTotal(double newMemoryTotal)
{
    //    if (qFuzzyCompare(m_memoryTotal, newMemoryTotal))
    //        return;
    m_memoryTotal = newMemoryTotal;
    emit memoryTotalChanged();
}


博客签名2021

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能制造中后期:深挖成本、提升效率的关键——标准工时

在智能制造的背景下&#xff0c;企业面临着持续的成本压力和效率提升的需求。特别是在智能制造的中后期&#xff0c;要想进一步深挖成本、提升效率&#xff0c;必须考虑标准工时这一重要因素。标准工时作为一种基础而富有价值的管理工具&#xff0c;对于建立领先的标准工时系统…

PPP协议_基础知识

ppp协议 点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。 一.ppp协议的组成 PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法&#xff0c;主要由以下三部分构成: 对各种协议数据报的封装方法(封装成帧)链路控制协议LCP    …

【机器学习】 特征工程:特征预处理,归一化、标准化、处理缺失值

特征预处理采用的是特定的统计方法&#xff08;数学方法&#xff09;将数据转化为算法要求的数字 1. 数值型数据 归一化&#xff0c;将原始数据变换到[0,1]之间 标准化&#xff0c;数据转化到均值为0&#xff0c;方差为1的范围内 缺失值&#xff0c;缺失值处理成均值、中…

前后端联调时JS数据精度问题的解决

在JavaScript中&#xff0c;Number类型范围 -2^53 1 到 2^53 - 1&#xff0c;而在Java中Long类型的取值范围是 -2^63 1 到 2^63 - 1, 比JavaScript中大很多&#xff0c;所以后端能正常处理。 其实 ES6 引入了 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 这两个常量…

开源与闭源:驾驭大模型未来的关键决断

在数字化的时代洪流中&#xff0c;开源与闭源的选择不断成为技术界的重要分水岭。随着特斯拉CEO埃隆马斯克的言论及其决策&#xff0c;公开支持开源&#xff0c;并糅合商业理念与技术革新&#xff0c;使得这场辩论再次成为公众关注的焦点。那么&#xff0c;在这场关乎技术发展脉…

八股文-TCP的三次握手

TCP协议是一种面向连接、可靠传输的协议&#xff0c;而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息&#xff0c;确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。 漫画TCP的三次握手 TCP连接的建立采用了三次握手的…

vite动态配置svg图标及其他方式集合

文章目录 前言使用vite-plugin-svg-icons动态配置安装插件引入图标下载新建组件svg-icon.vue使用 使用vue组件动态配置总结如有启发&#xff0c;可点赞收藏哟~ 前言 在配置化的情况下&#xff0c;图标配置也显得极为重要的 使用vite-plugin-svg-icons动态配置 参考vite-plugin…

C#中.NET 7.0 Windows窗体应用通过EF访问新建数据库

目录 一、 操作步骤 二、编写EF模型和数据库上下文 三、移植&#xff08;Migrations&#xff09;数据库 四、编写应用程序 五、生成效果 前文已经说过.NET Framework4.8 控制台应用通过EF访问已经建立的和新建的数据库。 前文已经说过.NET 6.0 控制台应用通过EF访问…

【Python大数据笔记_day09_hive函数和调优】

hive函数 函数分类标准[重点] 原生分类标准: 内置函数 和 用户定义函数(UDF,UDAF,UDTF) ​ 分类标准扩大化: 本来&#xff0c;UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的&#xff1b; 但是&#xff0c;现在可以将这个分类标准扩大到hive中所有的函数&#xff0c;…

1. redis入门到放弃

使用shutdown命令的时候&#xff0c;会在关机的同时生成一个RDB文件&#xff0c;使数据不丢失。redis虽然有16个库&#xff0c;但是基本上只会用0库&#xff0c;用其他的库没有意义。集群只能在0号库做mysql的读写&#xff0c;大约为写入600笔/s,读2000笔/s 一、Redis全局命令…

本地mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止

背景介绍&#xff1a; MySQL版本5.7&#xff0c;系统Win7&#xff0c;启动mysql服务时提示如下 解决方案 【会删除库中数据及mysql注册信息】&#xff1a; 1、删除原服务MySQL57 C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld --remove MySQL572、清空data 清空…

elementPlus实现暗黑与白亮主题切换

elementPlus上面默认是支持黑白主题切换的。只需要给html标签添加dark类名并且在mian.ts中导入css变量即可 我们就按照它推荐的useDark这个hook来 useDark使用起来非常简单&#xff0c;只需引入使用即可。vue直接就可以使用&#xff0c;无需做什么其他操作 中文网地址&#…

Apache阿帕奇安装配置

目录 一、下载程序 1. 点击Download 2. 点击Files for Microsoft Windows 3. 点击Apache Lounge 4. 点击httpd-2.4.54-win64-VSI6.zip ​编辑​ 5. 下载压缩包 6.解压到文件夹里 二、配置环境变量 1. 右键我的电脑 - 属性 2. 高级系统设置 3. 点击环境变量 4. 点击系统…

wpf devexpress 自定义统计

总计统计和分组统计包含预定义总计函数。这些函数允许你计算如下&#xff1a; 数据列的数量&#xff08;Count&#xff09; 最大和最小值(Max和Min) 总计和平均值&#xff08;Sum和Average&#xff09; 处理GridControl.CustomSummary 事件或者使用 GridControl.CustomSumm…

2024清理mac苹果电脑内存免费工具CleanMyMac X4.15

当你使用苹果电脑时&#xff0c;内存的优化和清理变得至关重要。随着时间的推移&#xff0c;我们的电脑内存可能会变得拥挤&#xff0c;导致性能下降。清理内存可以提高电脑的速度和反应能力&#xff0c;并确保它始终在良好状态下运行。本文将向您介绍怎么清理苹果电脑内存的方…

深度学习入门(第一天)——深度学习必备知识点

深度学习要解决的问题 人工智能、机器学习、深度学习的区别于联系 机器学习的流程&#xff1a; 数据提取 特征工程 建立模型 评估与应用 特征工程可以说是建模过程中&#xff0c;最重要的部分。 既然特征工程是最重要的&#xff0c;常规我们会做各种各样的特征&#xff0c;…

Google codelab WebGPU入门教程源码<5> - 使用Storage类型对象给着色器传数据(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#5 对应的源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。运行的时候&#xff0c;点击画面可以切换效果。 class Color4 {r: number;g: numb…

英伟达真是赢麻了,深夜推出最强AI芯片霸场 | 百能云芯

10月14日凌晨&#xff0c;英伟达在2023年全球超算大会&#xff08;Supercomputing Conference&#xff0c;SC&#xff09;上正式宣布&#xff0c;升级旗舰AI芯片&#xff0c;推出全新的H200芯片&#xff0c;以处理更强大的人工智能系统。包括亚马逊的AWS、Alphabet的Google Clo…

完全随机设计的方差分析

一、说明 实验设计在科学研究中发挥着至关重要的作用&#xff0c;使研究人员能够从数据中得出有意义的结论。一种常见的实验设计是完全随机设计&#xff08;CRD&#xff09;&#xff0c;其特征是将实验单元随机分配到治疗组。CRD 的方差分析 (ANOVA) 是一种统计技术&#xff0c…

【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; map和set 1. 前言2. map和set介绍3. pair结构介…