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

猜你喜欢

转载自blog.csdn.net/qq_24282081/article/details/80564008