來看一下 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 取樣兩個足夠短...