天天看點

擷取CPU使用率以及磁盤空間

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

繼續閱讀