擷取CPU使用率以及磁盤空間
FILETIME m_preidleTime;
FILETIME m_preKernelTime;
FILETIME m_preuserTime;
__int64 CompareFileTime2(FILETIME time1, FILETIME time2)
{
__int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime;
__int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime;
return b - a;
}
double CpuUsage()
{
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
GetSystemTimes(&idleTime, &kernelTime, &userTime);
int idle = CompareFileTime2(m_preidleTime, idleTime);
int kernel = CompareFileTime2(m_preKernelTime, kernelTime);
int user = CompareFileTime2(m_preuserTime, userTime);
if(kernel + user == 0)
return 0.0;
//(總的時間 - 空閑時間) / 總的時間
double cpu = abs((kernel + user - idle) * 100 / (kernel + user));
m_preidleTime = idleTime;
m_preKernelTime = kernelTime;
m_preuserTime = userTime;
return cpu;
}
//在定時器裡不停地更新使用率的值,當擷取磁盤空間失敗時則擷取系統時間
//OnTimer()
{
CString cstrCpuUsage,cstrDiskCapcity;
double dbCPU = CpuUsage();
cstrCpuUsage.Format("CPU 占用:%.2lf%%",dbCPU);
unsigned _int64 i64FreeBytesToCaller;
unsigned _int64 i64TotalBytes;
unsigned _int64 i61FreeBytes;
BOOL bResult = GetDiskFreeSpaceEx("C:\\",(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);
if(bResult)
{
cstrDiskCapcity.Format("C槽空間:%.2lfGB",(float)i64FreeBytesToCaller / 1024 / 1024 / 1024);
}
else
{
CTime time = CTime::GetCurrentTime();
cstrDiskCapcity = time.Format("%Y-%m-%d %H:%M:%S");
}
}