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