核心**
// 時間轉換
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...