獲取系統CPU 使用率

2021-08-11 22:40:29 字數 2666 閱讀 7953

來看一下 filetime的結構:

typedef struct _filetime filetime, *pfiletime, *lpfiletime;     

這個結構是64位的。ok,上個我除錯的截圖來證明一下,為什麼出錯

eax  是32的,shl eax,20h  也是還是他自己。沒有任何改變;

注意到  __int64  和  filetime都是64位的。所以可以直接轉換。

__int64 a = *(__int64*)&time1;   //只有乙個賦值操作。什麼左移,或操作,都不用了。可以少執行幾條指令。

ok, 展示乙份,我參考外文,簡化的**吧。

smarklock.hpp

#pragma once

#include class csmartlock

~csmartlock()

private:

critical_section m_cs;

};

cpu.hpp

#pragma once

#include "smarklock.hpp"

#include #define delay_diff 200

#define data_count (1000/delay_diff)

class cdelay

inline int msec()

private:

dword m_mark;

};class ccpu

;cdelay ccpu::s_delay;

int ccpu::s_count = 0;

int ccpu::s_index = 0;

int ccpu::s_lastcpu = 0;

int ccpu::s_cpu[data_count];

__int64 ccpu::s_time = 0;

__int64 ccpu::s_idletime = 0;

__int64 ccpu::s_kerneltime = 0;

__int64 ccpu::s_usertime = 0;

ccpu::ccpu()

ccpu::~ccpu()

int ccpu::getusage()

lock_start

stime = s_time;

slastcpu = s_lastcpu;

lock_end

if (s_delay.msec() <= delay_diff)

return slastcpu;

__int64 time;

__int64 idletime;

__int64 kerneltime;

__int64 usertime;

getsystemtimeasfiletime((lpfiletime)&time);

getsystemtimes(

(lpfiletime)&idletime,

(lpfiletime)&kerneltime,

(lpfiletime)&usertime

);if (0 == stime)

int icpu;

lock_start

__int64 usr = usertime - s_usertime;

__int64 ker = kerneltime - s_kerneltime;

__int64 idl = idletime - s_idletime;

__int64 sys = (usr + ker);

if (0 == sys)

icpu = 0;

else

icpu = (int)((sys - idl) * 100 / sys);

s_time = time;

s_idletime = idletime;

s_kerneltime = kerneltime;

s_usertime = usertime;

s_cpu[(s_index++) % data_count] = icpu;

s_count++;

if (s_count > data_count)

s_count = data_count;

int i;

icpu = 0;

for (i = 0; i < s_count; i++)

icpu += s_cpu[i];

icpu /= s_count;

s_lastcpu = icpu;

slastcpu = s_lastcpu;

lock_end

s_delay.mark();

return slastcpu;

}

test.cpp

#include "cpu.hpp"

#include void main()

}

系統級 獲取CPU使用率

利用windows系統函式getsystemtimes 間接獲得,getsystemtimes 可獲得系統自開機以來處於核心態的cpu時間 處於使用者態的cpu時間以及空閒時間,分別,在500毫秒的時間差內分別計算這三種時間的時間差 記作 kerneltime usertime和 idletime ...

如何獲取CPU使用率

這幾天做乙個分布式的軟體,用到了這些知識,暫時沒有時間具體介紹自己的收穫和心得,先把 載加修改 貼上吧,以後再補充。一 獲取當前程序的cpu使用率 記憶體使用量 總的io位元組數。processstatus.h ifndef process status h define process statu...

Android 獲取cpu使用率

方法一 adb shell top m 3 n 1 m 最大程序數 n 迭代次數 如果不跟 n 終端會一直卡在那,3秒重新整理一次 800 就是總共的cpu,idle那是空閒的,那總的前去空閒的然後除以總共的,就是使用率。方法二 獲取每乙個cpu的使用率 cpu的使用率的計算方法 1 取樣兩個足夠短...