Qt实时获取指定进程占用内存(Demo)

1.UI设计

这里写图片描述

2.Demo 代码

头文件

#ifndef USEDMEMDEMO_H
#define USEDMEMDEMO_H

#include <QtGui/QWidget>
#include "ui_usedMemDemo.h"

#include <QProcess>
#include <QTimer>
#include <QTime>

class usedMemDemo : public QWidget
{
	Q_OBJECT

public:
	usedMemDemo(QWidget *parent = 0, Qt::WFlags flags = 0);
	~usedMemDemo();

public slots:

	// 设置所监控的程序进程号
	void setProcessPID(const QString& pidStr);
	// 设置刷新频率
	void setFreshFrequency(const QString& iFrequency);
	// 开始获取
	void startFresh();
	// 停止
	void stopFresh();
	// 获取内存
	void getUsedMem();

private:
	Ui::usedMemDemoClass ui;

	// 定时器
	QTimer *timer;
	// 监控的程序的PID
	int PIDNum;
};

#endif // USEDMEMDEMO_H

源文件

#include "usedMemDemo.h"

usedMemDemo::usedMemDemo(QWidget *parent, Qt::WFlags flags)
	: QWidget(parent, flags)
{
	ui.setupUi(this);

	PIDNum = -1;
	timer = new QTimer(this);

	connect(ui.lineEdit_processPID,SIGNAL(textChanged(const QString&)),this,SLOT(setProcessPID(const QString&)));
	connect(ui.lineEdit_freshFrequency,SIGNAL(textChanged(const QString&)),this,SLOT(setFreshFrequency(const QString&)));
	connect(ui.pushButton_start,SIGNAL(clicked()),this,SLOT(startFresh()));
	connect(ui.pushButton_stop,SIGNAL(clicked()),this,SLOT(stopFresh()));
	connect(timer,SIGNAL(timeout()),this,SLOT(getUsedMem()));
}

usedMemDemo::~usedMemDemo()
{
	delete timer;
}

void usedMemDemo::setProcessPID(const QString& pidStr)
{
	this->PIDNum = pidStr.toInt();
}

void usedMemDemo::setFreshFrequency(const QString& iFrequency)
{
	int i = iFrequency.toInt();
	this->timer->setInterval(1000/i);
}

void usedMemDemo::startFresh()
{
	this->timer->start();
}

void usedMemDemo::stopFresh()
{
	this->timer->stop();
}

void usedMemDemo::getUsedMem()
{
	if(this->PIDNum == -1)
		return;
	// 获取当前进程PID
	QProcess p;
	p.start("tasklist /FI \"PID EQ " + QString::number(PIDNum) + " \"");	
	p.waitForFinished();
	QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
	p.close();
	// 替换掉","
	result = result.replace(",","");
	// 匹配 '数字+空格+K'部分。
	QRegExp rx("(\\d+)(\\s)(K)");
	// 初始化结果
	QString usedMem("");
	if(rx.indexIn(result) != -1)
	{
		// 匹配成功
		usedMem = rx.cap(0);
	}
	// 截取K前面的字符串,转换为数字,供换算单位使用。
	usedMem = usedMem.left(usedMem.length() - 1);
	// 换算为MB的单位
	result = QString::number(usedMem.toDouble()/1024,'g',4) + "M";
	// 获取当前时间(毫秒)
	QString currentTime = (QTime::currentTime()).toString("hh:mm:ss.zzz");
	ui.textEdit->append(currentTime+"  Occupied memory:"+result);
}

3.测试

这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯Jungle

您的支持是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值