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

涉及知识点
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;*/

猜你喜欢

转载自blog.csdn.net/yuxing55555/article/details/84651575