這幾天做乙個分布式的軟體,用到了這些知識,暫時沒有時間具體介紹自己的收穫和心得,先把****載加修改)貼上吧,以後再補充。
一、獲取當前程序的cpu使用率、記憶體使用量、總的io位元組數。
processstatus.h
#ifndef process_status_h
#define process_status_h
extern "c"
#endif/*process_status_h*/
processstatus.cpp
#include
#include
#include
#include "processstatus.h"
#pragma comment(lib,"psapi.lib")
// convert time type.
static uint64_t file_time_2_utc(const filetime* ftime)
// get the core number of the cpu.
static int get_processor_number()
int get_cpu_usage()
getsystemtimeasfiletime(&now);
if (!getprocesstimes(getcurrentprocess(), &creation_time, &exit_time,
&kernel_time, &user_time))
system_time = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time)) / processor_count_;
time = file_time_2_utc(&now);
if ((last_system_time_ == 0) || (last_time_ == 0))
system_time_delta = system_time - last_system_time_;
time_delta = time - last_time_;
assert(time_delta != 0);
if (time_delta == 0)
return -1;
// we add time_delta / 2 so the result is rounded.
cpu = (int)((system_time_delta * 100 + time_delta / 2) / time_delta);
last_system_time_ = system_time;
last_time_ = time;
return cpu;
}
int get_memory_usage(uint64_t* mem, uint64_t* vmem)
return -1;
}
int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes)
return -1;
} 二、獲取cpu的使用率
cpusage.cpp
#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
system_basic_information;
typedef struct
system_performance_information;
typedef struct
system_time_information;
typedef long (winapi *procntqsi)(uint,pvoid,ulong,pulong);
procntqsi ntquerysysteminformation;
void main(void)
;large_integer lioldsystemtime = ;
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("/ncpu usage (press any key to exit): ");
while(!_kbhit())
// store new cpu's idle and system time
lioldidletime = sysperfinfo.liidletime;
lioldsystemtime = systimeinfo.likesystemtime;
// wait one second
sleep(1000);
}printf("/n");
}
獲取系統CPU 使用率
來看一下 filetime的結構 typedef struct filetime filetime,pfiletime,lpfiletime 這個結構是64位的。ok,上個我除錯的截圖來證明一下,為什麼出錯 eax 是32的,shl eax,20h 也是還是他自己。沒有任何改變 注意到 int64 ...
Android 獲取cpu使用率
方法一 adb shell top m 3 n 1 m 最大程序數 n 迭代次數 如果不跟 n 終端會一直卡在那,3秒重新整理一次 800 就是總共的cpu,idle那是空閒的,那總的前去空閒的然後除以總共的,就是使用率。方法二 獲取每乙個cpu的使用率 cpu的使用率的計算方法 1 取樣兩個足夠短...
系統級 獲取CPU使用率
利用windows系統函式getsystemtimes 間接獲得,getsystemtimes 可獲得系統自開機以來處於核心態的cpu時間 處於使用者態的cpu時間以及空閒時間,分別,在500毫秒的時間差內分別計算這三種時間的時間差 記作 kerneltime usertime和 idletime ...