返回列表 发帖

获取CPU使用率

#include #include #include #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; printf("\n您的CPU使用率为: "); while(!_kbhit()) { //设置新的系统时间: 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 + 0.5; printf("\b\b\b\b%3d%%",(UINT)dbIdleTime);//输出CPU使用率。 } //改变新的CPU使用率和系统时间 liOldIdleTime = SysPerfInfo.liIdleTime; liOldSystemTime = SysTimeInfo.liKeSystemTime; Sleep(1000); } printf("\n"); }

获取CPU使用率

楼上的朋友果然是同道中人!感谢您的回复。

TOP

获取CPU使用率

我到不觉的这种软件没有用处,我做的项目中就需要这种技术。例如CPU使用率,任务管理器带,但是你的程序不能引用,如果你的程序中需要在某中CPU使用率的情况下才进行某些动作,他就有用了。
大家做的软件越多,就会发现系统自带的东西,只要没有API直接调用,那么有很多时候你必须在你的软件中实现它们。

TOP

获取CPU使用率

系统自带的任务管理器可以结束进程,但仍然有许多人编写杀进程的小软件。
而且这类软件在网上可以搜到许多,功能或者简单或者复杂。

TOP

获取CPU使用率

如果你看过XP以及其他版本的任务管理器,你就能看见CPU使用率了.
当然,作为编程的手段也鼓励大家用自己写代码实现系统自带的功能.

TOP

获取CPU使用率

XP有自带这种东西?

TOP

获取CPU使用率

这功能XP自带

TOP

获取CPU使用率

感觉用处不大。不过如果编写一个小软件,在状态栏显示CPU的使用率,也很个性。

TOP

返回列表 回复 发帖