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

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


关键字: QtQmlcpu内存、memory`

项目介绍

重要说明☝

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

系统监测

这个其实是一个临时起意,不属于原本的圆形设计,就是什么呢,我们的程序在启动后,是会置顶全品显示,则就导致我们想看系统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();
}


052-第三代软件开发-系统监测-LMLPHP
11-16 02:02