如何獲取CPU使用率

2021-05-08 09:42:14 字數 2982 閱讀 6377

這幾天做乙個分布式的軟體,用到了這些知識,暫時沒有時間具體介紹自己的收穫和心得,先把****載加修改)貼上吧,以後再補充。

一、獲取當前程序的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 ...