获取系统或某一进程的详细内存信息

涉及知识点
1.qt中定时器
2.使用c++进行文件保存
3.获取当前日期和时间信息
4.获取系统内存信息
5.将TextEdit右边滚动条移动至最下
6.获取某一进程的详细内存信息

头文件

//使用c++将数据写入到文件
#include <iostream>
#include <fstream>
std::ofstream g_save;
int g_lineLen=0;
int g_step = sizeof(int)+2;
int g_lineLimit = 160;
int g_lineNum = 0;
//获取内存信息
#include <windows.h>
#include <sysinfoapi.h>
#define MB (1024*1024)
MEMORYSTATUSEX g_MemoryInfo;//in sysinfoapi
//获取当前时间
#include <QTime>
#include <QDateTime>

初始化

    //定时器初始化
    m_timer = new QTimer(this);
    connect(m_timer,SIGNAL(timeout()),this,SLOT(slotGetMemoryInfo()));
    m_timer->start(50);//每xx ms执行一次slotGetMemoryInfo函数
    //创建文件
    CreateMemoryFile();

创建文件

void MainWindow::CreateMemoryFile()
{
    //保存文件初始化
    //当前的时间
    //QString nowtime = QTime::currentTime().toString("hh_mm_ss");
    //当前的年月日和时间
    QString nowdatetime = QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_ss");
    QString strFileName = "./" +nowdatetime + "_memoryinfo.txt";
    std::string fileName = strFileName.toStdString();
    g_save.open(fileName, std::ofstream::out);
}

创建新的文件

void MainWindow::CreateNewMemoryFile()
{
    if(g_lineNum*g_lineLimit > MB){
        g_save.close();
        CreateMemoryFile();
    }
}

获取内存信息并写入文件

#include<QScrollBar>
void MainWindow::slotGetMemoryInfo()
{
    //获取内存信息
    g_MemoryInfo.dwLength = sizeof(g_MemoryInfo);
    GlobalMemoryStatusEx(&g_MemoryInfo);
    DWORD mload = g_MemoryInfo.dwMemoryLoad;
    DWORDLONG tphys = g_MemoryInfo.ullTotalPhys;
    int memorySize = tphys*(mload*0.01)/MB;
    //将内存信息保存到文件
    g_save << memorySize << "  ";
    g_lineLen += g_step;
    if(g_lineLen >= g_lineLimit){
        g_save << std::endl;
        g_lineLen = 0;
        ++g_lineNum;
    }
    /**
      将内存信息显示在textEdit中*/
    //ui->textEdit->append();//换行添加文件
    //在一行的末尾追加,若一行已满则添加至下一行
    ui->textEdit->insertPlainText(QString::number(memorySize)+"  ");
    QScrollBar* scroll = ui->textEdit->verticalScrollBar();
    //使滚动条滑动到最下面
    scroll->setSliderPosition(scroll->maximum());
}

获取某一进程的内存信息

在.pro中添加LIBS += -lpsapi

	#include<windows.h>
	#include<psapi.h>
	//获取当前进程--GetCurrentProcess();
	DWORD pid = 9652;
	HANDLE handle;
	handle = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
	PROCESS_MEMORY_COUNTERS pmc;
	GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));
	qDebug() << pmc.PagefileUsage/1024;//提交大小
	qDebug() << pmc.WorkingSetSize/1024;//工作设置内存
	/*qDebug() << pmc.cb;
	qDebug() << pmc.PageFaultCount;
	qDebug() << pmc.PeakWorkingSetSize/1024;
	qDebug() << pmc.QuotaPeakPagedPoolUsage/1024;
	qDebug() << pmc.QuotaPagedPoolUsage/1024;
	qDebug() << pmc.QuotaPeakNonPagedPoolUsage/1024;
	qDebug() << pmc.QuotaNonPagedPoolUsage/1024;
	qDebug() << pmc.PeakPagefileUsage/1024;*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力减肥的小胖子5

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值