日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows 获取系统CPU和进程CPU 内存等信息

發布時間:2025/3/15 windows 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows 获取系统CPU和进程CPU 内存等信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#ifndef __GETSYSTEM_INFO_H #define __GETSYSTEM_INFO_H#include "psapi.h" #include "tlhelp32.h"typedef struct PROCESS_INFO_T {int memUsage; //內存使用率int threadNum; //線程數int TotalMemSize; //總內存int MemSize; //內存使用量int VirtualMem; //虛擬內存的使用int handleCount; //句柄的數量int SyscpuUsage; //系統的cpu利用率float ProcpuUsage; //進程的cpu利用率PROCESS_INFO_T(){memUsage = 0 ;threadNum = 0;MemSize = 0;TotalMemSize = 0;VirtualMem = 0;handleCount = 0;SyscpuUsage = 0;ProcpuUsage = 0.0;}}PROCESS_INFO; class DagSystemInfo:public singleton<DagSystemInfo> { public:DagSystemInfo(void);~DagSystemInfo(void);void init(void);void GetSysInfo(PROCESS_INFO& info);static void S_CheckCpuUsage(void* arg);void CheckCpuUsage(void);private:int GetThreadNum(void);__int64 m_syscpu; // 系統CPU利用率float m_Procpu; // 進程CPU利用率 };#endif #include "DagSystemInfo.h"DagSystemInfo::DagSystemInfo(void) {}DagSystemInfo::~DagSystemInfo(void) { }int DagSystemInfo::GetThreadNum(void) {int iThreadNum = 0;HANDLE hSnapshort = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if(INVALID_HANDLE_VALUE == hSnapshort) { return 0; } THREADENTRY32 stcThreadInfo; stcThreadInfo.dwSize = sizeof(stcThreadInfo);DWORD iCurProcessID = GetCurrentProcessId();for(BOOL bRet = Thread32First(hSnapshort, &stcThreadInfo); bRet != FALSE; bRet = Thread32Next(hSnapshort, &stcThreadInfo)){if(stcThreadInfo.th32OwnerProcessID == iCurProcessID){iThreadNum ++;}}CloseHandle(hSnapshort);return iThreadNum; }void DagSystemInfo::S_CheckCpuUsage(void* arg) {DagSystemInfo* pDagSysInfo = (DagSystemInfo*)arg;pDagSysInfo->CheckCpuUsage(); }__int64 CompareFileTime(FILETIME time1, FILETIME time2) { __int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime; __int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime; return (b - a); } /// 時間轉換 static uint64_t file_time_2_utc(const FILETIME* ftime) { LARGE_INTEGER li; li.LowPart = ftime->dwLowDateTime; li.HighPart = ftime->dwHighDateTime; return li.QuadPart; } void DagSystemInfo::CheckCpuUsage() {HANDLE hEvent; BOOL res; FILETIME preidleTime; FILETIME prekernelTime; FILETIME preuserTime; FILETIME idleTime; FILETIME kernelTime; FILETIME userTime; FILETIME creation_time;FILETIME exit_time;FILETIME kernel_time;FILETIME user_time;FILETIME prekernel_time;FILETIME preuser_time;SYSTEM_INFO info; GetSystemInfo(&info); int cpuCount = info.dwNumberOfProcessors;res = GetSystemTimes(&idleTime, &kernelTime, &userTime); preidleTime = idleTime; prekernelTime = kernelTime; preuserTime = userTime; HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessId());GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time);prekernel_time = kernel_time;preuser_time = user_time;FILETIME now; GetSystemTimeAsFileTime(&now); __int64 last_system_time_ = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time)) / cpuCount; __int64 last_time_ = file_time_2_utc(&now);hEvent = CreateEventA(NULL, FALSE, FALSE, NULL); while (true){ WaitForSingleObject(hEvent, 1000); res = GetSystemTimes(&idleTime, &kernelTime, &userTime); __int64 idle = CompareFileTime(preidleTime, idleTime); __int64 kernel = CompareFileTime(prekernelTime, kernelTime); __int64 user = CompareFileTime(preuserTime, userTime); m_syscpu= (kernel + user - idle) * 100 / (kernel + user); preidleTime = idleTime; prekernelTime = kernelTime; preuserTime = userTime; GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time);__int64 system_time = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time))/ cpuCount;GetSystemTimeAsFileTime(&now); __int64 time = file_time_2_utc(&now);__int64 system_time_delta = system_time - last_system_time_;__int64 time_delta = time - last_time_;m_Procpu = (float)system_time_delta * 100 / (float)time_delta;last_system_time_ = system_time ;last_time_ = time;} }void DagSystemInfo::GetSysInfo(PROCESS_INFO& info) {info.threadNum = GetThreadNum();HANDLE hThread = ::GetCurrentProcess();MEMORYSTATUSEX statex;statex.dwLength = sizeof (statex);GlobalMemoryStatusEx (&statex);info.memUsage = statex.dwMemoryLoad;info.TotalMemSize = statex.ullTotalPhys / 1024 /1024 /1024;DWORD dwHandleCount;GetProcessHandleCount(hThread, &dwHandleCount);info.handleCount = dwHandleCount;PROCESS_MEMORY_COUNTERS pmc;GetProcessMemoryInfo(hThread,&pmc,sizeof(pmc));info.MemSize= pmc.WorkingSetSize/1024/1024;info.VirtualMem = pmc.PagefileUsage/1024/1024;info.SyscpuUsage = m_syscpu>100? 100:m_syscpu;info.ProcpuUsage = m_Procpu>100? 100:m_Procpu;; }

總結

以上是生活随笔為你收集整理的windows 获取系统CPU和进程CPU 内存等信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。