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

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

本文配套程序下载地址为: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使用率 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使用率
// 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):

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

本文《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

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/heishanglaoyao/p/10489074.html

时间: 2024-10-05 05:36:40

Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率的相关文章

Windows系统CPU内存网络性能统计第一篇 内存

最近翻出以前做过的Windows系统性能统计程序,这个程序可以统计系统中的CPU使用情况,内存使用情况以及网络流量.现在将其整理一下(共有三篇),希望对大家有所帮助. 目录如下: 1.<Windows系统CPU内存网络性能统计第一篇 内存> 2.<Windows系统CPU内存网络性能统计第二篇 CPU> 3.<Windows系统CPU内存网络性能统计第三篇网络流量> 本篇将介绍统计系统内存使用情况,包括内存使用率.总物理内存大小.可用物理内存大小.总虚拟内存大小,可用虚

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

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678396 欢迎关注微博:http://weibo.com/MoreWindows Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++ http://blog.csdn.ne

java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)

通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar-x86-winnt.dll文件拷贝到java SDK目录的bin内 参考官方主页上的配置项. File Language Description Required sigar.jar Java Java API Yes (for

Windows系统中内存泄露与检测工具及方法

1.检测需要使用的工具:windbg工具.检测前,需要先安装windbg工具.安装了该工具后,会在安装目录下有一个umdh工具.假设windbg安装在以下目录下:D:\Program Files\Debugging Tools for Windows (x86) 2.内存泄露检测技巧2.1 运行cmd窗口,将路径设置到安装路径下:2.2 在该cmd窗口中设置环境变量_NT_SYMBOL_PATH:D:\Program Files\Debugging Tools for Windows (x86)

Ubuntu 15.1 unity在顶部面板显示系统CPU/内存/网络速度

全部的文件:http://files.cnblogs.com/files/xiaobo-Linux/ubuntu%E6%98%BE%E7%A4%BA%E7%B3%BB%E7%BB%9F%E7%BD%91%E9%80%9F.tar.gz 首先要安装系统监视工具System monitor Indicator 软件: sudo dpkg -i indicator-sysmonitor_0.3.9~oneiric0_all.deb 这时候也可以直接运行这个软件,但默认只能显示内存和CPU使用情况,想要

linux 查看CPU内存 网络 流量 磁盘 IO

使用vmstat命令来察看系统资源情况 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? Q: 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? A: 在命令行方式下, 1. 查看CPU使用情况的命令 每5秒刷新一次,最右侧有CPU的占用率的数据 $ vmstat 5 top 然后按Shift+P,按照进程处理器占用率排序 $ top 2. 查看内存使用情况的命令 用free命令查看内存占用情况 $ free top 然后按Shift+M, 按照进程内

jmeter监控linux cpu 内存 网络 IO

下载地址:http://jmeter-plugins.org/downloads/all/ PerfMon: 用来监控Server的CPU.I/O.Memory等情况 ServerAgent-2.2.1.zip 用法:PerfMon解压后放到被测试的服务器上,并运./startAgent.sh,默认工作在4444端口 1.检查linux上端口是否启动:netstat -apnt|grep 4444 2.检查jmeter机器到linux防火墙:telnet ip 4444 JMeterPlugin

windows系统中内存被system进程占用了很多很多

1.问题描述: 系统会更新,但是貌似系统更新失败,系统开启了一个线程,既没有完成系统想做的更新,又每次开机会启动.每次吃了我2000M内存,吃不消啊 2. 解决方案 2.1 百度了这个问题,通过这个链接解决了问题 链接:win10内存占用高?怎么办 2.2 做了什么就好了呢? 根据2.1的网址,根据说明去做操作,然后重启电脑,系统就没有打开那个很占用内容的进程 如图所示 原文地址:https://www.cnblogs.com/todaylockhere/p/9434070.html

使用BootCamp删除windows系统硬盘内存却没有改变

修复: 1. 重启电脑,按住CMD+S,进入单用户模式,也就是命令行模式 2. 输入fsck -f,回车,等待修复,然后输入reboot重启电脑