获取Windows操作系统的CPU使用率以及内存使用率
2016-05-26 20:39
513 查看
阅读目录
声明定义
引用lib文件
获取操作系统CPU使用率
获取操作系统内存大小
获取操作系统内存使用率
此功能参考了ProcessHacker项目的代码。
回到顶部
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
回到顶部
回到顶部
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
回到顶部
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
回到顶部
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
http://www.cnblogs.com/hbccdf/p/get_sys_cpu_usage_and_mem_usage.html
声明定义
引用lib文件
获取操作系统CPU使用率
获取操作系统内存大小
获取操作系统内存使用率
此功能参考了ProcessHacker项目的代码。
回到顶部
声明定义
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
typedef struct _UINT64_DELTA { ULONG64 Value; ULONG64 Delta; } UINT64_DELTA, *PUINT64_DELTA; typedef struct _UINTPTR_DELTA { ULONG_PTR Value; ULONG_PTR Delta; } UINTPTR_DELTA, *PUINTPTR_DELTA; #define InitializeDelta(DltMgr) \ ((DltMgr)->Value = 0, (DltMgr)->Delta = 0) #define UpdateDelta(DltMgr, NewValue) \ ((DltMgr)->Delta = (NewValue) - (DltMgr)->Value, \ (DltMgr)->Value = (NewValue), (DltMgr)->Delta) typedef struct _SYSTEM_PERFORMANCE_INFORMATION { LARGE_INTEGER IdleProcessTime; LARGE_INTEGER IoReadTransferCount; LARGE_INTEGER IoWriteTransferCount; LARGE_INTEGER IoOtherTransferCount; ULONG IoReadOperationCount; ULONG IoWriteOperationCount; ULONG IoOtherOperationCount; ULONG AvailablePages; ULONG CommittedPages; ULONG CommitLimit; ULONG PeakCommitment; ULONG PageFaultCount; ULONG CopyOnWriteCount; ULONG TransitionCount; ULONG CacheTransitionCount; ULONG DemandZeroCount; ULONG PageReadCount; ULONG PageReadIoCount; ULONG CacheReadCount; ULONG CacheIoCount; ULONG DirtyPagesWriteCount; ULONG DirtyWriteIoCount; ULONG MappedPagesWriteCount; ULONG MappedWriteIoCount; ULONG PagedPoolPages; ULONG NonPagedPoolPages; ULONG PagedPoolAllocs; ULONG PagedPoolFrees; ULONG NonPagedPoolAllocs; ULONG NonPagedPoolFrees; ULONG FreeSystemPtes; ULONG ResidentSystemCodePage; ULONG TotalSystemDriverPages; ULONG TotalSystemCodePages; ULONG NonPagedPoolLookasideHits; ULONG PagedPoolLookasideHits; ULONG AvailablePagedPoolPages; ULONG ResidentSystemCachePage; ULONG ResidentPagedPoolPage; ULONG ResidentSystemDriverPage; ULONG CcFastReadNoWait; ULONG CcFastReadWait; ULONG CcFastReadResourceMiss; ULONG CcFastReadNotPossible; ULONG CcFastMdlReadNoWait; ULONG CcFastMdlReadWait; ULONG CcFastMdlReadResourceMiss; ULONG CcFastMdlReadNotPossible; ULONG CcMapDataNoWait; ULONG CcMapDataWait; ULONG CcMapDataNoWaitMiss; ULONG CcMapDataWaitMiss; ULONG CcPinMappedDataCount; ULONG CcPinReadNoWait; ULONG CcPinReadWait; ULONG CcPinReadNoWaitMiss; ULONG CcPinReadWaitMiss; ULONG CcCopyReadNoWait; ULONG CcCopyReadWait; ULONG CcCopyReadNoWaitMiss; ULONG CcCopyReadWaitMiss; ULONG CcMdlReadNoWait; ULONG CcMdlReadWait; ULONG CcMdlReadNoWaitMiss; ULONG CcMdlReadWaitMiss; ULONG CcReadAheadIos; ULONG CcLazyWriteIos; ULONG CcLazyWritePages; ULONG CcDataFlushes; ULONG CcDataPages; ULONG ContextSwitches; ULONG FirstLevelTbFills; ULONG SecondLevelTbFills; ULONG SystemCalls; } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; typedef struct _SYSTEM_BASIC_INFORMATION { ULONG Reserved; ULONG TimerResolution; ULONG PageSize; ULONG NumberOfPhysicalPages; ULONG LowestPhysicalPageNumber; ULONG HighestPhysicalPageNumber; ULONG AllocationGranularity; ULONG_PTR MinimumUserModeAddress; ULONG_PTR MaximumUserModeAddress; ULONG_PTR ActiveProcessorsAffinityMask; CCHAR NumberOfProcessors; } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
回到顶部
引用lib文件
项目中需要引用ntdll.lib文件,此文件可以从ProcessHacker项目中找到。回到顶部
获取操作系统CPU使用率
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
ULONG64 total_time = 0; ULONG64 sys_time = 0; static SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION CpuInformation[1024]; static SYSTEM_INFO sys_info; static UINT64_DELTA cpu_kernel_delta; static UINT64_DELTA cpu_user_delta; static UINT64_DELTA cpu_idle_delta; static SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION cpu_totals; memset(&cpu_totals, 0, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)); GetSystemInfo(&sys_info); NtQuerySystemInformation( SystemProcessorPerformanceInformation, &CpuInformation, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * (ULONG)sys_info.dwNumberOfProcessors, NULL ); for (int i = 0; i < (int)sys_info.dwNumberOfProcessors; i++) { SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION& cpu_info = CpuInformation[i]; // KernelTime includes idle time. LONGLONG dpc_time = cpu_info.Reserved1[0].QuadPart; LONGLONG interrupt_time = cpu_info.Reserved1[i].QuadPart; cpu_info.KernelTime.QuadPart -= cpu_info.IdleTime.QuadPart; cpu_info.KernelTime.QuadPart += dpc_time + interrupt_time; cpu_totals.Reserved1[0].QuadPart += dpc_time; cpu_totals.IdleTime.QuadPart += cpu_info.IdleTime.QuadPart; cpu_totals.Reserved2 += cpu_info.Reserved2; cpu_totals.Reserved1[1].QuadPart += cpu_info.Reserved1[1].QuadPart; cpu_totals.KernelTime.QuadPart += cpu_info.KernelTime.QuadPart; cpu_totals.UserTime.QuadPart += cpu_info.UserTime.QuadPart; } UpdateDelta(&cpu_kernel_delta, cpu_totals.KernelTime.QuadPart); UpdateDelta(&cpu_user_delta, cpu_totals.UserTime.QuadPart); UpdateDelta(&cpu_idle_delta, cpu_totals.IdleTime.QuadPart); total_time = cpu_kernel_delta.Delta + cpu_user_delta.Delta + cpu_idle_delta.Delta; sys_time = cpu_kernel_delta.Delta + cpu_user_delta.Delta; if (total_time) { return sys_time * 100.0 / total_time; } else { return 0.0; }
回到顶部
获取操作系统内存大小
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
static SYSTEM_BASIC_INFORMATION system_basic_info; static long long mem_size = 0; if (mem_size != 0) return mem_size; static SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); NtQuerySystemInformation( SystemBasicInformation, &system_basic_info, sizeof(SYSTEM_BASIC_INFORMATION), NULL); mem_size = system_basic_info.NumberOfPhysicalPages; mem_size *= sys_info.dwPageSize; mem_size /= (1024 * 1024); //MB return mem_size;
回到顶部
获取操作系统内存使用率
![](https://images.cnblogs.com/cnblogs_com/hbccdf/545117/o_minus.gif)
Collapse
static SYSTEM_PERFORMANCE_INFORMATION perf_info; static SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); NtQuerySystemInformation( SystemPerformanceInformation, &perf_info, sizeof(SYSTEM_PERFORMANCE_INFORMATION), NULL); long long available_size = perf_info.AvailablePages; available_size *= sys_info.dwPageSize; available_size /= (1024 * 1024); //MB long long mem_size = sys_mem_size(); if (mem_size != 0) { return (mem_size - available_size) * 100.0 / mem_size; } else { return 0.0; }
http://www.cnblogs.com/hbccdf/p/get_sys_cpu_usage_and_mem_usage.html
相关文章推荐
- android开发 从fragment中通过控件跳到另一个activity的实现
- sys/types.h和fcntl.h的作用
- android TextView 如何动态获取宽度
- 【CodeForces】675B - Restoring Painting(数学推导)
- 关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)
- 论文笔记之:Fully Convolutional Attention Localization Networks: Efficient Attention Localization for Fine-Grained Recognition
- 2016.5.26笔记
- Android之值得开发者(安卓)必备的十八大开发资源
- 练习-----部门内部留言板(0526)
- halcon图片格式和opencv的IPLimage格式的转换
- python 学习2
- 2016年5月26日晚上(妙味课堂js基础-2笔记四(BOM))
- Linux 之不同运维人员共用root 账户权限审计
- 6_12 油田(UVa572)<图的连通块DFS>
- CAFFE学习笔记(五)用caffe跑自己的jpg数据
- 【codeforces】#621B-Wet Shark and Bishops
- #include sys/xxx.h头文件 UNIX头文件 2012-07-08 20:08:30
- unity摄像机跟随的脚本
- butterknife控件绑定
- 乐雨 德国happyrain 超大男士高尔夫伞 直柄伞 双人伞 双层伞面防风雨伞 黑色【图片 价格 品牌 报价】-京东