WIN7下获取多核CPU【各个】使用率的方法

本文介绍了在Windows 7操作系统中如何详细监控每个核心CPU的使用情况,帮助用户了解系统资源分配和性能表现。
摘要由CSDN通过智能技术生成

WIN7定义的结构体比XP多了几字节,所以网上很多获取代码 在WIN7 多核下都运行不了
//包含处理器数量的系统结构体
typedef struct SYSTEM_BASIC { DWORD dwUnknown1; ULONG uKeMaximumIncrement; ULONG uPageSize; ULONG uMmNumberOfPhysicalPages; ULONG uMmLowestPhysicalPage; ULONG uMmHighestPhysicalPage; ULONG uAllocationGranularity; PVOID pLowestUserAddress; PVOID pMmHighestUserAddress; ULONG uKeActiveProcessors; BYTE bKeNumberProcessors; BYTE bUnknown2; WORD wUnknown3; }SYSTEM_BASIC_INFORMATION; //包含处理器使用量的系统结构体typedef struct SYSTEM_PROCESSOR_PERFORMANCE{__int64 i64IdleTime;__int64 i64KernelTime;__int64 i64UserTime;__int64 i64DpcTime;__int64 i64InterruptTime;long lInterruptCount;}SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;

使用率,其实就是CPU空闲时间占整一秒的比例而已,就是时间的相除
//计算CPU使用率
int CCpuDraw::CalProcessorsUses()
{	
	__int64	nIdleTime=0,nKernelTime=0,nUserTime=0,nDpcTime=0,nInterruptTime=0,nTotalTime=0;		
	
	int status=NtQuerySystemInformation(SystemProcessorPerformanceInformation, m_ProcessInfo, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * m_nNumberProcessors, 0);
	if(status != NO_ERROR)   
		return -1;
	
	for (int i = 0; i < m_nNumberProcessors; i++)
	{
		nIdleTime = m_ProcessInfo[i].i64IdleTime - m_vProcess[i].nOidleTime;
		nAllIdleTime+=nIdleTime;
		nKernelTime = m_ProcessInfo[i].i64KernelTime - m_vProcess[i].nOkerenelTime;
		nUserTime = m_ProcessInfo[i].i64UserTime - m_vProcess[i].nOuserTime;
		nDpcTime = m_ProcessInfo[i].i64DpcTime -m_vProcess[i].nOdpctTime;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值