首页
社区
课程
招聘
[转帖]计算CPU的使用率
发表于: 2007-11-10 23:56 4459

[转帖]计算CPU的使用率

2007-11-10 23:56
4459
在CE中计算CPU的使用率比较简单,用GetTickCount计算系统已经运行了多少个ms,用GetIdleTime计算系统空闲的时间,再计算一下两者的比例就行了。
代码如下
dwStartTick = GetTickCount();
dwIdleSt = GetIdleTime();
Sleep();//做想做的事,做完之后再计算使用率
dwStopTick = GetTickCount();
dwIdleEd = GetIdleTime();
PercentIdle = ((100*(dwIdleEd - dwIdleSt)) / (dwStopTick - dwStartTick));

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
2


(破解6字限制)
2007-11-11 16:43
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
楼上更强.以前没听过的用法.谢谢.
2007-11-11 19:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有没有人用过'ZwQuerySystemInformation'计算呀

_GetCpuUsage    proc   
        LOCAL @pNtDll:dword
        LOCAL @pQuerySystemInfomation:dword
        LOCAL @SysBaseInfo:SYSTEM_BASIC_INFORMATION
        LOCAL @dwProcessorNum:dword
        LOCAL @SysNewTime:SYSTEM_TIME_INFORMATION
        LOCAL @SysPerfTime:SYSTEM_PERFORMANCE_INFORMATION
       
        LOCAL @dbIdleTime:DOUBLE
        LOCAL @dbSystemTime:DOUBLE
        LOCAL @liOldIdleTime:LARGE_INTEGER
        LOCAL @liOldSystemTime:LARGE_INTEGER
        
        LOCAL @CurrentCpuUsage:DOUBLE
        LOCAL @TmpDouble:DOUBLE
        LOCAL @Ret:dword
       
       
        .data
            @@_100     DOUBLE 100.0
            @@_05      DOUBLE 0.5
            _TWO_32    DOUBLE 42949672969.0 ;4*1024*1024*1024
        .code
        pushad
        invoke RtlZeroMemory,addr @SysBaseInfo,sizeof @SysBaseInfo
        invoke LoadLibrary,_T("NtDll.dll")
        .if !eax
                MyDebug "LoadLibrary Failed!"
                ret
        .endif
        mov @pNtDll,eax
        invoke GetProcAddress,@pNtDll,_T("ZwQuerySystemInformation")
        .if !eax
                MyDebug "GetProcAddress Failed!"
                ret
        .endif
        mov @pQuerySystemInfomation,eax
        ;=============取处理器个数===================
        push 0
        mov eax,sizeof @SysBaseInfo
        push eax
        lea eax,@SysBaseInfo
        push eax
        push 0
        call @pQuerySystemInfomation
        .if eax!=0
                MyDebug "Get Processor Number Failed"
                ret
        .endif
        xor eax,eax
        mov al,@SysBaseInfo.NumberProcessors
        mov @dwProcessorNum,eax
        ;=============取处理器个数===================
       
         
        ;=============取新的系统时间===================
        push 0
        mov eax,sizeof @SysNewTime
        push eax
        lea eax,@SysNewTime
        push eax
        push 3
        call @pQuerySystemInfomation
        .if eax!=0
                MyDebug "Get System Time Failed"
                ret
        .endif
        ;=============取新的系统时间===================
        ;=============获得cpu空闲时间===================
        push 0
        mov eax,sizeof @SysPerfTime
        push eax
        lea eax,@SysPerfTime
        push eax
        push 2
        call @pQuerySystemInfomation
        .if eax!=0
                MyDebug "Get System PerfTime Failed"
                ret
        .endif
        ;=============获得cpu空闲时间===================
        ;=============计算cpu使用率===================
          
                    ;当前空闲时间值=新的空闲时间值-旧的空闲时间值   
             
                    ;当前系统时间值=新的系统时间值-旧的系统时间值             
                ;当前cpu使用率%=100.0-(当前空闲时间*100.0)/cpu处理器个数+0.5
        ;=============计算cpu使用率===================
        invoke FreeLibrary,@pNtDll
        popad
        ret
_GetCpuUsage endp

取计算cpu使用率时老是溢出,哪位可以帮忙完成下....
2007-11-12 15:26
0
游客
登录 | 注册 方可回帖
返回
//