获取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");
}
}