#include "procmemstat.h" #include #include ProcMemStat::ProcMemStat() { } void ProcMemStat::UpdateCPUMemStat(QString & strInfo) { #define MAX_CPU 256 //Support 256 cpu core static bool bFirst = true; static int nNowCPUCore = 0; static qint64 nLastCPUTotal,nLastIdleTotal,nLastIrqCount; static qint64 nVectorLastCPU[MAX_CPU]; static qint64 nVectorLastIdle[MAX_CPU]; static qint64 nVectorLastIrq[MAX_CPU]; qint64 nNowCPUTotal,nNowIdleTotal,nIrqCount; float fcputotal; float firqtotal; float fVectorCPU[MAX_CPU]; float fVectorIrq[MAX_CPU]; qint64 nTotalDiff = 0; int ncpunum; // qint64 tuser,tnice,tsys,tidle,tiowait,tirq,tsoftirq; qint64 titem[7]; QFile xFileStat; xFileStat.setFileName("/proc/stat"); if(xFileStat.open(QIODevice::ReadOnly)) { QByteArray ba = xFileStat.readAll(); QList xlist = ba.split('\n'); int nsize = xlist.size(); if(nsize > 1) { QString strline(xlist.at(0)); QStringList baitem = strline.split(QRegExp("[\t ,;]+")); if(baitem.size()>=8) { unsigned int i; nNowCPUTotal = 0; for(i=0;i<7;i++) { titem[i] = QString(baitem[i+1]).toLongLong(); nNowCPUTotal = nNowCPUTotal + titem[i]; } nNowIdleTotal = titem[3]; nIrqCount = titem[5] + titem[6]; nTotalDiff = nNowCPUTotal - nLastCPUTotal; if((bFirst == false)&&(nTotalDiff > 0)) { fcputotal = 100.0 - 100.0*(nNowIdleTotal - nLastIdleTotal)/nTotalDiff; firqtotal = 100.0*(nIrqCount - nLastIrqCount)/nTotalDiff; } else { fcputotal = 0; firqtotal = 0; } int ncpuindex = 0; for(i=1;i= 8) { unsigned int j; qint64 evCPUTotal = 0; for(j=0;j<7;j++) { titem[j] = QString(baitem[j+1]).toLongLong(); evCPUTotal = evCPUTotal + titem[j]; } qint64 evIdleTotal = titem[3]; qint64 evIrqCount = titem[5] + titem[6]; if(ncpuindex < MAX_CPU) { qint64 nevDiff = evCPUTotal - nVectorLastCPU[ncpuindex]; if((nevDiff >0)&&(bFirst == false)) { fVectorCPU[ncpuindex] = 100.0 - 100.0*(evIdleTotal - nVectorLastIdle[ncpuindex])/nevDiff; fVectorIrq[ncpuindex] = 100.0*(evIrqCount - nVectorLastIrq[ncpuindex])/nevDiff; } else { fVectorCPU[ncpuindex] = 0; fVectorIrq[ncpuindex] = 0; } nVectorLastCPU[ncpuindex] = evCPUTotal; nVectorLastIdle[ncpuindex] = evIdleTotal; nVectorLastIrq[ncpuindex] = evIrqCount; } } ncpuindex++; } } ncpunum = ncpuindex; nLastCPUTotal = nNowCPUTotal; nLastIdleTotal = nNowIdleTotal; nLastIrqCount = nIrqCount; } if(bFirst)bFirst = false; } } xFileStat.close(); strInfo.clear(); strInfo = strInfo + QString("CPU: Used ") + QString::number(fcputotal,'f',3) +QString(" Irq Used : ")+ QString::number(firqtotal,'f',3) +QString(" Core Count: ")+QString::number(ncpunum)+QString("\n"); std::cout<<" CPU: Used "< xlist = ba.split('\n'); int nsize = xlist.size(); if(nsize > 1) { QString strline(xlist.at(0)); QStringList baitem = strline.split(QRegExp("[\t ,;]+")); if(baitem.size()>= 2) { qint64 memtotal = QString(baitem[1]).toLongLong()/1024; strInfo = strInfo + QString("Mem Total: ") + QString::number(memtotal)+ QString(" MB\n"); std::cout<<" Mem Total "<< memtotal<<" MB"<= 2) { qint64 memfree = QString(baitem[1]).toLongLong()/1024; strInfo = strInfo + QString("Mem Free: ") + QString::number(memfree)+ QString(" MB\n"); std::cout<<" Mem Free "<< memfree<<" MB"<