日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發(fā)布時間:2025/3/15 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows 获取系统CPU和进程CPU 内存等信息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#ifndef __GETSYSTEM_INFO_H #define __GETSYSTEM_INFO_H#include "psapi.h" #include "tlhelp32.h"typedef struct PROCESS_INFO_T {int memUsage; //內(nèi)存使用率int threadNum; //線程數(shù)int TotalMemSize; //總內(nèi)存int MemSize; //內(nèi)存使用量int VirtualMem; //虛擬內(nèi)存的使用int handleCount; //句柄的數(shù)量int SyscpuUsage; //系統(tǒng)的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; // 系統(tǒng)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); } /// 時間轉(zhuǎn)換 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;; }

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。