Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率
2013-03-20 10:17
513 查看
本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810
转载请标明出处,原文地址:/article/1392154.html
欢迎关注微博:http://weibo.com/MoreWindows
上一篇《Windows系统CPU内存网络性能统计第一篇内存》(/article/1392165.html)介绍了在Windows系统下如何查看系统内存总量,使用率等信息。接下在将用三篇博客来介绍如何获取CPU整体使用率及多核CPU各核的使用率。
Windows系统CPU内存网络性能统计博客目录:
1.《Windows系统CPU内存网络性能统计第一篇内存》
/article/1392165.html
2.《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》
/article/1392154.html
3.《Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#》
/article/1392153.html
4.《Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++》
/article/1392152.html
如何获取CPU整体使用率及多核CPU各核的使用率在网上已经有很多文章了,在各大论坛上也有很多人在提问。本人在网上搜索了下,之前很多文章都是介绍使用ntdll.dll中一个未公开的API函数——NtQuerySystemInformation。基本代码结构如下:
// 获得系统CPU使用率 By MoreWindows( http://blog.csdn.net/MoreWindows )
typedef LONG (WINAPI *PROCNTQSI)(UINT, PVOID, ULONG, PULONG);
pFunNtQuerySystemInf = (PROCNTQSI)GetProcAddress(GetModuleHandle("ntdll"), "NtQuerySystemInformation");
这种方法肯定不太好,这个API函数既然未公开,那么说明微软公司不支持开发应用程序时直接使用这个函数,并且在以后的系统升级中ntdll.dll很可能去掉这个API函数。经过本人MoreWindows(http://weibo.com/MoreWindows)的实地测试,这种使用NtQuerySystemInformation的程序在Win7下都无法获取CPU使用率。
为了让我们的代码能在WinXP及Win7多系统中正常运行。本人实现了一个CCPUUseRate类。下面是这个CCPUUseRate类的实现代码:
在Win7系统运行结果如下(本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810):
本文《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》(/article/1392154.html)介绍的是如何获取CPU的整体使用率,现大多为多核的CPU,因此如何获取多核CPU各核的使用率了。请看下面二篇——
3.Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#
/article/1392153.html
4.Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++
/article/1392152.html
本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810
转载请标明出处,原文地址:/article/1392154.html
欢迎关注微博:http://weibo.com/MoreWindows
转载请标明出处,原文地址:/article/1392154.html
欢迎关注微博:http://weibo.com/MoreWindows
上一篇《Windows系统CPU内存网络性能统计第一篇内存》(/article/1392165.html)介绍了在Windows系统下如何查看系统内存总量,使用率等信息。接下在将用三篇博客来介绍如何获取CPU整体使用率及多核CPU各核的使用率。
Windows系统CPU内存网络性能统计博客目录:
1.《Windows系统CPU内存网络性能统计第一篇内存》
/article/1392165.html
2.《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》
/article/1392154.html
3.《Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#》
/article/1392153.html
4.《Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++》
/article/1392152.html
如何获取CPU整体使用率及多核CPU各核的使用率在网上已经有很多文章了,在各大论坛上也有很多人在提问。本人在网上搜索了下,之前很多文章都是介绍使用ntdll.dll中一个未公开的API函数——NtQuerySystemInformation。基本代码结构如下:
// 获得系统CPU使用率 By MoreWindows( http://blog.csdn.net/MoreWindows )
typedef LONG (WINAPI *PROCNTQSI)(UINT, PVOID, ULONG, PULONG);
pFunNtQuerySystemInf = (PROCNTQSI)GetProcAddress(GetModuleHandle("ntdll"), "NtQuerySystemInformation");
这种方法肯定不太好,这个API函数既然未公开,那么说明微软公司不支持开发应用程序时直接使用这个函数,并且在以后的系统升级中ntdll.dll很可能去掉这个API函数。经过本人MoreWindows(http://weibo.com/MoreWindows)的实地测试,这种使用NtQuerySystemInformation的程序在Win7下都无法获取CPU使用率。
为了让我们的代码能在WinXP及Win7多系统中正常运行。本人实现了一个CCPUUseRate类。下面是这个CCPUUseRate类的实现代码:
// 获得系统CPU使用率 // /article/1392154.html // By MoreWindows( http://blog.csdn.net/MoreWindows ) // 先调用Initialize(),然后while(true){Sleep(1000);GetCPUUseRate();}就能获得CPU使用率。 // 经过测试,可以在WinXP及Win7下使用。 class CCPUUseRate { public: BOOL Initialize() { FILETIME ftIdle, ftKernel, ftUser; BOOL flag = FALSE; if (flag = GetSystemTimes(&ftIdle, &ftKernel, &ftUser)) { m_fOldCPUIdleTime = FileTimeToDouble(ftIdle); m_fOldCPUKernelTime = FileTimeToDouble(ftKernel); m_fOldCPUUserTime = FileTimeToDouble(ftUser); } return flag; } //调用Initialize后要等待1秒再调用此函数 int GetCPUUseRate() { int nCPUUseRate = -1; FILETIME ftIdle, ftKernel, ftUser; if (GetSystemTimes(&ftIdle, &ftKernel, &ftUser)) { double fCPUIdleTime = FileTimeToDouble(ftIdle); double fCPUKernelTime = FileTimeToDouble(ftKernel); double fCPUUserTime = FileTimeToDouble(ftUser); nCPUUseRate= (int)(100.0 - (fCPUIdleTime - m_fOldCPUIdleTime) / (fCPUKernelTime - m_fOldCPUKernelTime + fCPUUserTime - m_fOldCPUUserTime) *100.0); m_fOldCPUIdleTime = fCPUIdleTime; m_fOldCPUKernelTime = fCPUKernelTime; m_fOldCPUUserTime = fCPUUserTime; } return nCPUUseRate; } private: double FileTimeToDouble(FILETIME &filetime) { return (double)(filetime.dwHighDateTime * 4.294967296E9) + (double)filetime.dwLowDateTime; } private: double m_fOldCPUIdleTime; double m_fOldCPUKernelTime; double m_fOldCPUUserTime; };这个类的使用非常简单。先调用Initialize(),然后使用类似于如下代码while(true){Sleep(1000);GetCPUUseRate();}就能获得CPU使用率。下面是使用范例,程序中printf的\r可以参考《C/C++ 在控制台下显示进度》(/article/1392211.html):
// Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率 // 经过测试,可以在WinXP及Win7下使用 ///article/1392154.html #include <windows.h> #include <stdio.h> #include <conio.h> int main() { printf(" Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率\n"); printf(" - /article/1392154.html -\n"); printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); CCPUUseRate cpuUseRate; if (!cpuUseRate.Initialize()) { printf("Error! %d\n", GetLastError()); getch(); return -1; } else { while (true) { Sleep(1000); printf("\r当前CPU使用率为:%4d%%", cpuUseRate.GetCPUUseRate()); } } return 0; }在WinXP系统运行结果如下(本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810):
在Win7系统运行结果如下(本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810):
本文《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》(/article/1392154.html)介绍的是如何获取CPU的整体使用率,现大多为多核的CPU,因此如何获取多核CPU各核的使用率了。请看下面二篇——
3.Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#
/article/1392153.html
4.Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++
/article/1392152.html
本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810
转载请标明出处,原文地址:/article/1392154.html
欢迎关注微博:http://weibo.com/MoreWindows
相关文章推荐
- Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率
- Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率C#
- Windows系统CPU内存网络性能统计第四篇 CPU 多核CPU各核使用率C++
- Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率C#
- Windows系统CPU内存网络性能统计第一篇 内存
- Windows系统CPU内存网络性能统计第四篇 CPU 多核CPU各核使用率C++
- Windows系统CPU内存网络性能统计第一篇 内存
- Windows系统CPU内存网络性能统计第一篇 内存
- Windows系统CPU内存网络性能统计第一篇 内存
- Windows系统CPU内存网络性能统计第一篇 内存
- 收集物理cpu 内存使用率 网络带宽流量
- 统计 cpu 内存 使用率的shell脚本代码
- linux系统CPU、内存、硬盘、网络、lnmp服务整体监控邮件报警
- Linux下java获取CPU、内存、磁盘IO、网络带宽使用率
- 一个用了统计CPU 内存 硬盘 使用率的shell脚本
- linux服务器性能——CPU、内存、流量、磁盘使用率的监控
- sysstat服务负载统计,如CPU占有率,网络使用率,磁盘速度