首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

Windows系统CPU内存储器网络性能统计第二篇 CPU CPU整体使用率

2013-03-22 
Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率本文配套程序下载地址为:http://download.csdn.n

Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678359

欢迎关注微博:http://weibo.com/MoreWindows

 

上一篇《Windows系统CPU内存网络性能统计第一篇内存》(http://blog.csdn.net/morewindows/article/details/8459219)介绍了在Windows系统下如何查看系统内存总量,使用率等信息。接下在将用三篇博客来介绍如何获取CPU整体使用率及多核CPU各核的使用率。

Windows系统CPU内存网络性能统计博客目录:

1.《Windows系统CPU内存网络性能统计第一篇内存》

http://blog.csdn.net/morewindows/article/details/8459219

2.《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》

http://blog.csdn.net/morewindows/article/details/8678359

3.《Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#》

http://blog.csdn.net/morewindows/article/details/8678382

4.《Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++》

http://blog.csdn.net/morewindows/article/details/8678396

 

    如何获取CPU整体使用率及多核CPU各核的使用率在网上已经有很多文章了,在各大论坛上也有很多人在提问。本人在网上搜索了下,之前很多文章都是介绍使用ntdll.dll中一个未公开的API函数——NtQuerySystemInformation。基本代码结构如下:

// 获得系统CPU使用率// http://blog.csdn.net/morewindows/article/details/8678359// 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++ 在控制台下显示进度》(http://blog.csdn.net/morewindows/article/details/6742078):

// Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率// 经过测试,可以在WinXP及Win7下使用//http://blog.csdn.net/morewindows/article/details/8678359#include <windows.h>#include <stdio.h>#include <conio.h>int main(){printf("    Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率\n");  printf(" - http://blog.csdn.net/morewindows/article/details/8678359 -\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):

Windows系统CPU内存储器网络性能统计第二篇 CPU CPU整体使用率

在Win7系统运行结果如下(本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810):

 Windows系统CPU内存储器网络性能统计第二篇 CPU CPU整体使用率

本文《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》(http://blog.csdn.net/morewindows/article/details/8678359)介绍的是如何获取CPU的整体使用率,现大多为多核的CPU,因此如何获取多核CPU各核的使用率了。请看下面二篇——

3.Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#

http://blog.csdn.net/morewindows/article/details/8678382

4.Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++

http://blog.csdn.net/morewindows/article/details/8678396

 

 

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678359

欢迎关注微博:http://weibo.com/MoreWindows



 

1楼MoreWindows昨天 10:18
程序正在上传中。

热点排行