QT 程序中对Linux设备内存的监控

来源:互联网 发布:交趾郡 知乎 编辑:程序博客网 时间:2024/06/07 02:58

      最新在QT上开发应用程序的过程,需要对应用程序运行过程中Linux设备的内存使用率等进行显示,在Linux设备内存占用较高时给用户提示!

      由于本人对Linux系统任务管理器的原理,不能直接从任务管理器中得到Linux 设备CPU的占用率,于是就采用间接办法来获取CPU信息。

      Linux系统信息一般都能在/proc/目录下查看cpuinfo,meminfo文件来获取,通过读取解析这些文件,关于Linux设备的消息都能获取到,然后在界面上以不同形式显示出来。

查看/proc/下meminfo 文件信息如下图:


文件格式比较统一,可以通过解析文件获取所需参数的值

本人实现方法如下:

    //parse meminfo file
    QString val;
    QFile file;
    file.setFileName("/proc/meminfo");
    file.open(QIODevice::ReadOnly | QIODevice::Text);
    val = file.readAll();                            //将整个文件内容转化成字符串
    QStringList strList = QString(val).split('\n');        //通过“\n”将整个文件内容按字符串进行存储
    QString stringTmp;
    for(int i = 0; i != strList.size(); i++)
    {
        stringTmp = strList.at(i);
        if(!(stringTmp.isEmpty()))
        {
            QStringList strListTmp = QString(stringTmp).split(':');
            for(int j = 0; j != strListTmp.size(); j++)
            {
                mMapMemoryFile.insert(strListTmp.at(0),strListTmp.at(1));          //将每个字符串的“key” 、"value"解析出来存入一个Map中方便查找
            }
        }
    }
    QMap<QString,QString>::iterator iter1 = mMapMemoryFile.find("MemTotal");
    QString tpuMemTotalStr = (iter1.value()).trimmed();
    int index1 = tpuMemTotalStr.indexOf("kB");
    QString tpuMemTotal = tpuMemTotalStr.left(index1);         //将value中的“kB”去掉,只保留数值
    QMap<QString,QString>::iterator iter2 = mMapMemoryFile.find("MemFree");
    QString tpuMemFreeStr = (iter2.value()).trimmed();
    int index2 = tpuMemFreeStr.indexOf("kB");
    QString tpuMemFree = tpuMemFreeStr.left(index2);