c 獲得cpu廠商 C 獲取程序CPU佔用率

2021-10-16 13:25:38 字數 3555 閱讀 5930

核心**

// 時間轉換

static __int64 file_time_2_utc(const filetime* ftime)

large_integer li;

li.lowpart = ftime->dwlowdatetime;

li.highpart = ftime->dwhighdatetime;

return li.quadpart;

// 獲得cpu的核數

static int get_processor_number()

system_info info;

getsysteminfo(&info);

return (int)info.dwnumberofprocessors;

// 獲取程序cpu占用

int get_cpu_usage(int pid)

//cpu數量

static int processor_count_ = -1;

//上一次的時間

static __int64 last_time_ = 0;

static __int64 last_system_time_ = 0;

filetime now;

filetime creation_time;

filetime exit_time;

filetime kernel_time;

filetime user_time;

__int64 system_time;

__int64 time;

__int64 system_time_delta;

__int64 time_delta;

int cpu = -1;

if(processor_count_ == -1)

processor_count_ = get_processor_number();

getsystemtimeasfiletime(&now);

handle hprocess = openprocess(process_all_access, false, pid);

if (!getprocesstimes(hprocess, &creation_time, &exit_time, &kernel_time, &user_time))

return -1;

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))

last_system_time_ = system_time;

last_time_ = time;

return -1;

system_time_delta = system_time - last_system_time_;

time_delta = time - last_time_;

if (time_delta == 0)

return -1;

cpu = (int)((system_time_delta * 100 + time_delta / 2) / time_delta);

last_system_time_ = system_time;

last_time_ = time;

return cpu;

以下是其它網友的補充

c++ 獲取程序記憶體占用和cpu利用率等資訊

1.獲取記憶體占用資訊

獲取步驟:

(1)獲取當前程序控制代碼 使用getcurrentprocess(),返回乙個當前程序的控制代碼

(2)定義乙個儲存記憶體資訊的結構體 process_memory_counters pmc;

結構體定義如下:

typedef struct _process_memory_counters process_memory_counters, *pprocess_memory_counters;

(3)獲取當前程序的記憶體資訊,儲存到結構體pmc中(第二個引數) 使用getprocessmemoryinfo()

api定義如下:

getprocessmemoryinfo(

handle process,               獲取記憶體使用情況的程序控制代碼。

pprocess_memory_counters ppsmemcounters,            返回記憶體使用情況的結構

dword cb                                結構的大小

);de

2.獲取cpu利用率

獲取步驟:

(1)獲取當前程序控制代碼 通過openprocess(),返回乙個程序控制代碼

函式原型如下:

handle openprocess(

dword dwdesiredaccess, //渴望得到的訪問許可權(標誌)

bool binherithandle, // 是否繼承控制代碼

dword dwprocessid// 程序標示符,可以通過getpid()獲取當前程序id

(2)獲取cpu使用時間 通過呼叫getprocesstimes()

函式原型如下:

bool

winapi

getprocesstimes(

__in handle hprocess,       需要獲取相關時間的程序控制代碼

__out lpfiletime lpcreationtime,          程序的建立時間

__out lpfiletime lpexittime,            程序的退出時間

__out lpfiletime lpkerneltime,           程序在核心模式下的所有時間

__out lpfiletime lpusertime            程序在使用者模式下的所有時間

cpu使用時間=(lpkerneltime+lpusertime)/getprocessnumber()(核心數)

核心數獲取方法如下:

int getprocessnumber()

system_info info;

getsysteminfo(&info);

return (int)info.dwnumberofprocessors;

(3)計算cpu利用率

cpu利用率=(現在的cpu占用時間-過去的cpu占用時間)/系統時間差

注:系統時間差可以通過getsystemtimeasfiletime()獲取,然後在轉換為int64型別即可,自定義轉換方法如下:

__int64 filetimetoint64(const filetime& time)

ularge_integer tt; //64位無符號整型值

tt.lowpart = time.dwlowdatetime;

tt.highpart = time.dwhighdatetime;

return(tt.quadpart); //返回整型值

c 獲得cpu廠商 獲取CPU占有率的C 類

獲取cpu占有率的c 類 windows系統cpu占有率,實時監視cpu占有率,對cpu使用率有要求的系統可以參考使用。pragma once define systembasicinformation 0 define systemperformanceinformation 2 define s...

C 獲得cpu個數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!本文 cpp view plain copy print?測試cpu核心個數 if defined win32 defined win64 define linux include else define windows include endif...

C 獲取CPU資訊

include windows.h include iostream include string using namespace std 用來儲存資訊 dword deax dword debx dword decx dword dedx void execpuid dword veax 初始化c...