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

C语言获取Windows下系统内存、硬盘、cpu使用率 #define _WIN32_WINNT 0x0501 //这个不加会出错,具体它有什么用我也不知道 #include <stdio.h> #include <Windows.h> #include <time.h> #define true 1 double m_fOldCPUIdleTime; double m_fOldCPUKernelTime; ... 阅读详情

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

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

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

 

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

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

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

http://blog.youkuaiyun.com/morewindows/article/details/8459219

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

http://blog.youkuaiyun.com/morewindows/article/details/8678359

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

http://blog.youkuaiyun.com/morewindows/article/details/8678382

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

http://blog.youkuaiyun.com/morewindows/article/details/8678396

 

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

// 获得系统CPU使用率 By MoreWindows( http://blog.youkuaiyun.com/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.youkuaiyun.com/morewindows/article/details/8678359
// By MoreWindows( http://blog.youkuaiyun.com/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.youkuaiyun.com/morewindows/article/details/6742078):

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

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

 

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

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

http://blog.youkuaiyun.com/morewindows/article/details/8678382

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

http://blog.youkuaiyun.com/morewindows/article/details/8678396

 

 

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

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

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



 

Windows获取系统、进程CPU占用率、内存、磁盘、网卡 1、获取系统cpu: 使用WindowsAPI函数GetSystemTimes(),为获取当前使用率,通过执行两次的方式进行差值比较。在win7,win10上试验结果准确,具体用法参考下列代码: //Windows程序获取cpu占用率 void GetCpuUsage_WIN(double* CPUResult) { CPUResult[0] = 0; CPUResult[1... 阅读详情

相关推荐

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

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

ffygvf的博客 432

windows获取内存和硬盘使用百分比

获取windows CPU、内存和硬盘使用情况,剩余

wangcg123的专栏 2392

C语言日期型与double型互相转换

在C语言中没有直接将日期转换为double型的函数,但是在将日期类型保存到文件时往往需要日期的转换。C语言日期型与double型互相转换。在VC6.0和VC2010下编译通过。C/C++时间日期与doub型相互转换。

windows c语言 cpu 序列号,C语言获取Windows总CPU使用率.

#include #include #include double FileTimeToDouble(FILETIME* pFiletime){return (double)((*pFiletime).dwHighDateTime * 4.294967296E9) + (double)(*pFiletime).dwLowDateTime;}double m_fOldCPUIdleTime;doub...

weixin_39677538的博客 244

手把手教你排查Abaqus中的Johnson-Cook损伤参数:避免因d3正负号导致的仿真失败

本文详细解析了Abaqus中Johnson-Cook损伤参数d3正负号设置的关键问题,帮助用户避免因参数错误导致的仿真失败和Excessive distortion报错。通过对比不同文献定义、提供实操指南和典型错误排查流程,有效提升非线性分析的准确性和效率。

weixin_33960567的博客 354

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

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

本文配套程序下载地址为:http://download.youkuaiyun.com/detail/morewindows/5160810 转载请标明出处,原文地址:http://blog.youkuaiyun.com/morewindows/article/details/8678359 欢迎关注微博:http://weibo.com/MoreWindows   上一篇《Windows系统CPU

fkfang的专栏 705

ANSYS命令流黑箱揭秘:流体渗透压力载荷的七种收敛优化策略

本文深入解析ANSYS Workbench中流体渗透压力载荷的七种收敛优化策略,重点探讨接触探测点迭代逻辑、PPCN阈值动态调整及FPAT参数优化等关键技术。通过命令流示例和实战技巧,帮助工程师有效解决流体与结构相互作用仿真中的收敛难题,提升计算效率和精度。

weixin_29274337的博客 523

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

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

ffygvf的博客 304

keil+Jlink GD32调试记录

Jlink+keil,GD32调试记录,踩坑及解决,持续更新。

SUN_BW的博客 2952

【SLAM】SVO2.0编译运行和论文代码解读

SVO2是我遇到的最难编译的代码了,可能公开版本不能放太鲁棒的代码吧,搞了快一个星期,终于跑起来了。

iwanderu的博客 5973

WindowsVC++获取CPU整体使用率

WindowsVC++获取CPU整体使用率 去发现同类优质开源项目:https://gitcode.com/ 本文档提供了Windows系统下使用VC++进行CPU整体使用率获取的配套程序。本程序基于《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》一文进行开发,实现了在Windows系统下对CPU整体使用率的获取。程序已经过测试,可以在WinXP和Win7系统上正常运行...

gitblog_06791的博客 417

Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】

1. 设置目标原件时,选择切换,这样就可以实现,当原件展示时,点击自动隐藏,隐藏时自动显示; 2. 展开/收起原件(推动/拉动原件)设置为方向**向下**

专注于计算机研发知识和资讯分享 1380

真香,一款Windows系统监控绝配工具!

LiteMonitor是一款轻量级开源Windows桌面硬件监控工具,提供CPU/GPU/内存/磁盘/网络等实时性能监测。主要特点包括:支持横竖屏/任务栏显示模式,自定义主题编辑器,多语言界面,三色阈值报警,历史流量统计,以及网络测速功能。采用现代化UI设计,具备窗口自动隐藏、鼠标穿透、DPI自适应等特性,所有配置通过JSON文件管理。由于涉及底层硬件访问,可能触发杀毒软件误报,但代码完全开源可验证。

l3212094351的博客 1171

【yolo】如何在 YOLOv8 中添加负样本以减少误检

在YOLOv8目标检测中,误检(False Positive)是一个常见问题,即模型将非目标区域错误识别为目标。通过引入负样本(Negative Samples),即不包含任何目标框的图像,可以有效减少误检。在YOLOv8中添加负样本的方法是为这些图像提供空的标注文件(.txt),确保每张图像都有对应的标注文件,即使内容为空。可以使用Python脚本自动生成这些空标注文件。使用负样本时需注意数量比例、标注一致性、验证集同步和图像质量。适当加入负样本能显著提升模型鲁棒性,降低误判风险。

songhuangong123的博客 2879

【Bug已解决】Codex CLI 报错 You‘ve hit your usage limit 解决方案

Codex CLI 密集使用时触发 You've hit your usage limit 限流报错,本质是订阅套餐额度机制在正常发挥作用。文中给出等待滚动重置、拆分大任务、主动管理上下文、升级套餐、团队排队机制等完整解决方案。

博客 1万+

终极指南:如何在Windows系统上实现containerd容器性能监控

containerd是一个开源且可靠的容器运行时,为容器化应用提供高效管理能力。在Windows系统中,对containerd容器进行性能监控是确保应用稳定运行的关键环节。本文将详细介绍在Windows环境下实现containerd容器性能监控的完整方案,帮助用户轻松掌握监控技巧。 ## containerd容器性能监控基础架构 要实现高效的性能监控,首先需要了解containerd在Wind

gitblog_00718的博客 303

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: C++通过DLL调用C#代码
下一篇: Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率C#
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值