win7,64系统,vc6.0,如何获取CPU使用率

ralln 2015-05-06 11:29:10
win7,64系统,vc6.0,如何获取CPU使用率?

尝试使用过getsystemtimes了,用VS2010可编译通过,VC6.0中无法编译通过

有什么好的方法在WIN7、VC6.0中来获取CPU使用率么?
...全文
191 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-05-08
  • 打赏
  • 举报
回复
WMI?
fhw217 2015-05-06
  • 打赏
  • 举报
回复

#include <windows.h>
#include <conio.h>
#include <stdio.h>
#define SystemBasicInformation 0
#define SystemPerformanceInformation 2
#define SystemTimeInformation 3
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))

typedef struct{ 
	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{ 
	LARGE_INTEGER liIdleTime; 
	DWORD dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;

typedef struct{ 
	LARGE_INTEGER liKeBootTime; 
	LARGE_INTEGER liKeSystemTime; 
	LARGE_INTEGER liExpTimeZoneBias; 
	ULONG uCurrentTimeZoneId; 
	DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;

typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);
PROCNTQSI NtQuerySystemInformation;

void main()
{ 
	SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; 
	SYSTEM_TIME_INFORMATION SysTimeInfo; 
	SYSTEM_BASIC_INFORMATION SysBaseInfo; 
	double dbIdleTime; 
	double dbSystemTime; 
	LONG status; 
	LARGE_INTEGER liOldIdleTime = {0,0}; 
	LARGE_INTEGER liOldSystemTime = {0,0}; 
	NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(GetModuleHandle("ntdll"),"NtQuerySystemInformation"); 
	if (!NtQuerySystemInformation) return; 
	// get number of processors in the system 
	status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL); 
	if (status != NO_ERROR) 
		return; 
	int amount=0;
	printf("\n您的CPU使用率为: \n"); 
	while(!_kbhit()) 
	{ 
		//设置新的系统时间: 
		amount++;
		status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0); 
		if (status!=NO_ERROR) 
			return; 
		status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL); 
		if (status != NO_ERROR) 
			return;
		if (liOldIdleTime.QuadPart != 0)
		{ 
			dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
			dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); 
			dbIdleTime = dbIdleTime / dbSystemTime; 
			dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors; 
			int c=(int)dbIdleTime; 
			printf("\b\b\b\b\b\b\b\b\b\b\b\b\b%d---%d%%",amount,c);
		} 
		//改变新的CPU使用率和系统时间 
		liOldIdleTime = SysPerfInfo.liIdleTime; 
		liOldSystemTime = SysTimeInfo.liKeSystemTime;
		Sleep(500); 
	}
	printf("\n");
}
oyljerry 2015-05-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/hzy694358/article/details/6067822

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧