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

头图

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

文章目录

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

关键字: 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core mvc 之 依赖注入

一、视图中使用依赖注入 1、core目录下添加 LogHelperService.cs 类 public class LogHelperService{public void Add(){}public string Read(){return "日志读取";}} 2、Startup.cs 文件中 注入依赖注入 3、Views目录中 _ViewImports.cshtml 添加引用 4、视图使用…

Go语言常用命令详解(一)

文章目录 前言常用命令go build示例参数说明 go test示例参数说明 go run示例参数说明 go clean示例参数介绍 总结写在最后 前言 Go语言是一种开源的编程语言&#xff0c;由Google开发并于2009年首次发布。它以其简洁、高效和并发性能而备受开发者的喜爱。作为一门相对年轻的语…

C进阶---自定义类型:结构体、枚举、联合

目录 一、前言 二、结构体 2.1结构体的声明 2.2特殊的声明 2.3结构体的自引用 2.4结构体变量的定义和初始化 2.5结构体内存对齐 2.6修改默认对齐数 2.7结构体传参 三、位段 3.1什么是位段 3.2位段的内存分配 3.3位段的跨平台问题 3.4位段的应用 四、枚…

【ML】欠拟合和过拟合的一些判别和优化方法(吴恩达机器学习笔记)

吴恩达老师的机器学习教程笔记 减少误差的一些方法 获得更多的训练实例——解决高方差尝试减少特征的数量——解决高方差尝试获得更多的特征——解决高偏差尝试增加多项式特征——解决高偏差尝试减少正则化程度 λ——解决高偏差尝试增加正则化程度 λ——解决高方差 什么是…

Spring-IoC与DI入门案例

IoC入门案例 IoC入门案例思路分析 管理什么&#xff1f;&#xff08;Service与Dao&#xff09;如何将被管理的对象告知IoC容器&#xff1f;&#xff08;配置&#xff09;被管理的对象交给IoC容器&#xff0c;如何获取到IoC容器&#xff1f;&#xff08;接口&#xff09;IoC容…

【Java 进阶篇】JQuery 动画:为页面添彩的魔法

在现代的Web开发中&#xff0c;用户体验的提升是至关重要的一环。而动画作为页面交互中的重要组成部分&#xff0c;更是为用户带来了全新的感官体验。本篇博客将深入探讨 JQuery 中动画的应用&#xff0c;带你进入一个充满活力的前端世界。 前言 动画是网页设计的一种重要手段…

基于电力需求侧能效管理平台的建设及应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;电力是国民经济和居民生活的命脉&#xff0c;为贯彻落实国家对于节能减排工作的总体部署&#xff0c;深入推进电力需求侧管理工作、本文从电力需求侧能效管理平台所要实现的功能与应用信息技术两个方面&#x…

磁盘阵列之RAID

一、RAID介绍 RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出&#xff0c;最初是为了组合小的廉价磁盘来代替大的昂贵磁盘&#xff0c;同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是…

linux高级篇基础理论一(详细文档、Apache,网站,MySQL、MySQL备份工具)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

根据视频编码时间批量重命名视频文件

整理收藏的小视频的时候发现很多视频命名很随意&#xff0c;自己命名又太麻烦&#xff0c;看着乱糟糟的文件又心烦&#xff0c;所有写了这个程序&#xff0c;代码如下&#xff1a; import osfrom filetype import filetype from pymediainfo import MediaInfovideo_extension …

μC/OS-II---消息队列管理2(os_q.c)

目录 消息队列的主要优点消息队列和消息邮箱消息队列相关操作向消息队列发送消息(FIFO)向消息队列发送消息(LIFO)向消息队列发送消息(扩展&#xff09;消息队列获取/无等待清空消息队列消息队列信息获取消息队列中断等待 消息队列的主要优点 消息队列的主要优点是解耦和异步通…

nginx启动命令

普通启动 切换到nginx安装目录的sbin目录下&#xff0c;执行&#xff1a;./nginx 通过配置文件启动 ./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c是指定配置文件,而且配置文件路径必须指定绝对路…

YOLO改进系列之注意力机制(CoordAttention模型介绍)

简介 在轻量级网络上的研究表明&#xff0c;通道注意力会给模型带来比较显著的性能提升&#xff0c;但是通道注意力通常会忽略对生成空间选择性注意力图非常重要的位置信息。因此&#xff0c;新加坡国立大学的提出了一种为轻量级网络设计的新的注意力机制&#xff0c;该机制将…

RabbitMQ之死信队列

文章目录 一、死信的概念二、死信的来源三、实战1、消息 TTL 过期2、队列达到最大长度3、消息被拒 总结 一、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#x…

转载:YOLOv8改进全新Inner-IoU损失函数:扩展到其他SIoU、CIoU等主流损失函数,带辅助边界框的损失

0、摘要 随着检测器的快速发展&#xff0c;边界框回归&#xff08;BBR&#xff09;损失函数不断进行更新和优化。然而&#xff0c;现有的 IoU 基于 BBR 仍然集中在通过添加新损失项来加速收敛&#xff0c;忽略了 IoU 损失项本身的局限性。尽管从理论上讲&#xff0c;IoU 损失可…

Android10 手势导航

种类 Android10 默认的系统导航有三种&#xff1a; 1.两个按钮的 2.三个按钮的 3.手势 它们分别对应三个包名 frameworks/base/packages/overlays/NavigationBarMode2ButtonOverlay frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlay frameworks/base/packa…

怎么恢复删除的数据? 8个有效的数据恢复方法

无论您在保存备份方面多么小心&#xff0c;灾难有时还是会发生。有时您的备份软件无法按预期运行。 如果您的外部驱动器靠近您的设备&#xff0c;发生火灾/洪水/故障时&#xff0c;有时备份会与原始文件一起丢失。即使是云存储也不能避免故障。 还有一个事实是&#xff0c;我…

C#检查服务状态,以及进行服务启停

1. linux环境 linux环境通过执行bash命令直接执行&#xff1a; public string RunCmdLinux(string cmd){var proc new Process();System.Console.Write($"Run Linux cmd > [{cmd}] START!");proc.StartInfo.CreateNoWindow true;proc.StartInfo.FileName &…

TOUGH系列软件教程

查看原文>>>全流程TOUGH系列软件实践技术应用 TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分…

『C++成长记』C++入门——内联函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、内联函数 &#x1f4d2;1.1内联函数的概念 &#x1f4d2;1.2内联函数的特征 …