PDH性能测试之四-----------获取每个对象的Counter和Instance

易语言实现磁盘IO性能监控工具源码解析与实战 易语言虽常被视为入门级开发工具,但其对Windows平台底层机制的支持远超表面认知。通过封装Windows API调用、提供直接内存操作指令及支持结构化异常处理,易语言可实现进程枚举、服务控制、注册表监控等典型系统级任务。例如,使用API函数命令调用即可遍历所有运行进程:.局部变量 快照句柄, 整数型快照句柄 = CreateToolhelp32Snapshot (#TH32CS_SNAPPROCESS, 0)该能力使得开发者无需切换至C/C++即可完成轻量级系统工具开发。零拷贝技术。 阅读详情
#define _UNICODE /*主要对C标准库函数,将宏替换为宽字节形式*/
#define UNICODE /*主要对Windows API标准函数,将函数宏替换为宽字节形式*/
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include <pdh.h>
#include <pdhmsg.h> /*存放PDH函数返回的错误代码*/
#include <tchar.h> ///

#pragma comment(lib, "pdh.lib")
void getObjects(BOOL bCounter,BOOL bInstance);
void getObjcetItem(LPTSTR ptsObject,BOOL bCounter,BOOL bInstance);
void main(void) {
	getObjects(TRUE,FALSE);
	getObjects(FALSE,TRUE);
}
void getObjects(BOOL bCounter,BOOL bInstance) {

	PDH_STATUS status = ERROR_SUCCESS;
	LPTSTR ptsObjectsListBuffer = NULL;
	DWORD dwObjectsListSize = 0;
	LPTSTR pTemp = NULL;
	/*第一次调用,将返回实际的字符数*/
	status = PdhEnumObjects(
			NULL,				// real-time source
			NULL,				// local machine
			ptsObjectsListBuffer,         // LPTSTR mszObjectList
			&dwObjectsListSize,   //LPDWORD pcchBufferLength,
			PERF_DETAIL_EXPERT,     //DWORD dwDetailLevel
			FALSE     //BOOL bRefresh
			);
	/*读取性能对象列表*/
	if (status == PDH_MORE_DATA) {
		// Allocate the buffers and try the call again.
		ptsObjectsListBuffer = (LPTSTR) malloc(dwObjectsListSize * sizeof(TCHAR));
		if (NULL != ptsObjectsListBuffer) {
			status = PdhEnumObjects(
					NULL,     // real-time source
					NULL,     // local machine
					ptsObjectsListBuffer,         // LPTSTR mszObjectList
					&dwObjectsListSize,   //LPDWORD pcchBufferLength,
					PERF_DETAIL_EXPERT,     //DWORD dwDetailLevel
					FALSE     //BOOL bRefresh
					);
			if (status == ERROR_SUCCESS) {
				for (pTemp = ptsObjectsListBuffer; *pTemp != 0;pTemp += _tcslen(pTemp) + 1)
						/*从字符数组中读取字符串的方法*/
						{
					_tprintf(_T("%s\n"), pTemp);

					getObjcetItem(pTemp,bCounter,bInstance);
					//wprintf(L"%s\n", pTemp);
				}
			} else {
				_tprintf(_T("Second PdhEnumObjects failed with %0x%x.\n"),
						status);
			}
		} else {
			_tprintf(_T("Unable to allocate buffers.\n"));
			status = ERROR_OUTOFMEMORY;
		}
	} else {
		_tprintf(_T("\nPdhEnumObjects failed with 0x%x.\n"), status);
	}
	if (ptsObjectsListBuffer != NULL)
		free(ptsObjectsListBuffer);
}
void getObjcetItem(LPTSTR ptsObject,BOOL bCounter,BOOL bInstance) {
	PCTSTR strObject =ptsObject;
	PDH_STATUS status = ERROR_SUCCESS;
	LPTSTR ptsCounterListBuffer = NULL;     //类的属性列表
	DWORD dwCounterListSize = 0;
	LPTSTR ptsInstanceListBuffer = NULL;     //实例列表
	DWORD dwInstanceListSize = 0;
	LPTSTR pTemp = NULL;

	// Determine the required buffer size for the data.
	status = PdhEnumObjectItems(
			NULL,                   // real-time source
			NULL,                   // local machine
			strObject,         // object to enumerate
			ptsCounterListBuffer, &dwCounterListSize,//如果Buffer为NULL,Size为0
			ptsInstanceListBuffer, &dwInstanceListSize,
			PERF_DETAIL_WIZARD,     // counter detail level
			0);

	if (status == PDH_MORE_DATA) {
		// Allocate the buffers and try the call again.
		ptsCounterListBuffer = (LPTSTR) malloc(dwCounterListSize * sizeof(TCHAR));
		ptsInstanceListBuffer = (LPTSTR) malloc(dwInstanceListSize * sizeof(TCHAR));

		if (NULL != ptsCounterListBuffer && NULL != ptsInstanceListBuffer) {
			status = PdhEnumObjectItems(
					NULL,                   // real-time source
					NULL,                   // local machine
					strObject,         // object to enumerate
					ptsCounterListBuffer, &dwCounterListSize,
					ptsInstanceListBuffer, &dwInstanceListSize,
					PERF_DETAIL_WIZARD,     // counter detail level
					0);

			if (status == ERROR_SUCCESS) {
				_tprintf(_T("_____________________\n"));
				_tprintf(_T("Counters ConTain:\n\n"));
				//wprintf(L"Counters that the Process objects defines:\n\n");

				// Walk the counters list. The list can contain one
				// or more null-terminated strings. The list is terminated
				// using two null-terminator characters.
				if(bCounter){
				for (pTemp = ptsCounterListBuffer; *pTemp != 0;pTemp += _tcslen(pTemp) + 1) {
					_tprintf(_T("\t"));
					_tprintf(_T("%s\n"), pTemp);
					//wprintf(L"%s\n", pTemp);
				}
				}
				if(bInstance){
					_tprintf(_T("_____________________\n"));
					_tprintf(_T("\nInstances Contain:\n\n"));
				//wprintf(L"\nInstances of the Process object:\n\n");

				// Walk the instance list. The list can contain one
				// or more null-terminated strings. The list is terminated
				// using two null-terminator characters.
				for (pTemp = ptsInstanceListBuffer; *pTemp != 0;pTemp +=_tcslen(pTemp) + 1) {
					_tprintf(_T("\t"));
					_tprintf(_T("%s\n"), pTemp);
					//wprintf(L"%s\n", pTemp);
				}
				}
			} else {
				_tprintf(_T("Second PdhEnumObjectItems failed with %0x%x.\n"),
						status);
				//wprintf(L"Second PdhEnumObjectItems failed with %0x%x.\n",status);
			}
		} else {
			_tprintf(_T("Unable to allocate buffers.\n"));
			//wprintf(L"Unable to allocate buffers.\n");
			status = ERROR_OUTOFMEMORY;
		}
	} else {
		_tprintf(_T("\nPdhEnumObjectItems failed with 0x%x.\n"), status);
		//wprintf(L"\nPdhEnumObjectItems failed with 0x%x.\n", status);
	}

	if (ptsCounterListBuffer != NULL)
		free(ptsCounterListBuffer);

	if (ptsInstanceListBuffer != NULL)
		free(ptsInstanceListBuffer);
}

instance-counter:Modmail插件的实例计数器 一个简单的API,可下载ModMail插件 这是什么? 这是一个回购对于我用来计算使用我的插件的modmail实例数量的代码,间接地它是一个Modmail-Plugin-Instance-Counter。 自托管? 不支持。 不和谐地联系Piyush#4332 作者 立即下载

相关推荐

Delphi网络编程参考实例集.rar

Delphi网络编程参考实例集,可以显示网络计数信息:   { 列举机器( machines)、对象(objects),计数( counters)和实例(instances).    获取缺省对象和缺省计数    利用以下函数:    PdhEnumMachines 列举机器    PdhConnectMachine 连接机器    PdhEnumObjects 列举对象    PdhEnumObjectItems 对象列表对象    pdhGetDefaultPerfObject 缺省计数对象    PdhGetDefaultPerfCounter 缺省计数

系统性能计数器

     *  系统性能计数器quoted by wanfustudio from csdn:  http://blog.youkuaiyun.com/wanfustudiotrackback:http://hi.baidu.com/wlzqi一.性能计数器简介:系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计 Windows 系统各项性能指标的东西。在 Windows

雁南飞 4381

Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++

部分参考:https://mp.weixin.qq.com/s/2GZAJAUPHTXFOKDRv-D21Q 一、下载源码 https://github.com/opencv 二、源码编译 ① 在cmake中添加源码编译路径和生成路径,第一次点击configure。 ② 添加contrib路径 第一次configure后,找到OPENCV_EXTRA_MODULES_PATH,将contrib路径添加进来,注意要具体到modules/,继续configure。 ..

zaibeijixing的专栏 1万+

windows系统性能计数器函数

系统性能计数器[Z] FROM:http://hi.baidu.com/wlzqi/blog/item/d9782e73f4b4ba1c8701b092.html 上面的地址是专家的地址,有什么问题请那边看 一.性能计数器简介: 系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计 Windows 系统各项性能指标的东西。在 Windows 2000

ghevinn欢迎您光临 2736

S32K3基于EB配置GPT触发WDG的实战解析

本文详细解析了S32K3 MCU基于EB tresos工具配置GPT定时器触发看门狗(WDG)的实战方法。通过分析协同工作机制、MCAL配置步骤及代码实现,帮助开发者构建可靠的硬件监控系统,提升汽车电子系统的安全性与实时性。

f9g0h的博客 204

告别‘打架’的检测头:手把手教你用PyTorch实现YOLOv11解耦头(附完整代码)

本文详细解析了YOLOv11解耦检测头的创新设计与PyTorch实现,通过解耦分类和回归任务,显著提升目标检测性能。文章包含完整的代码实现、架构设计解析及工程调优技巧,帮助开发者深入理解并应用这一先进技术。

weixin_29031057的博客 301

纵谈进程枚举

 转自:http://www.blog.edu.cn/user2/33587/archives/2005/254906.shtml代码下载:说明 ProcessSpy.zip当程序出现异常而失去响应,我们通常的做法是打开Windows任务管理器强行将其“杀死”。Windows任务管理器是个好东西,它能显示当前系统中运行的所有进程,以及它们的实时性能参数。但是作为程序员,你知道这些功能是怎么

hbrr224的专栏 2672

电力远动入门:手把手解析IEC 60870-5-101规约的帧结构与报文交互(基于DL/T634.5101-2002)

本文深入解析IEC 60870-5-101规约的帧结构与报文交互,适用于电力远动通信系统。通过详细讲解规约的基础架构、控制域位定义及典型报文交互流程,帮助工程师快速掌握101规约的核心技术,提升电力自动化系统的调试与维护能力。

weixin_27076351的博客 244

获取PDH性能对象列表之三-------------获取性能对象的属性列表以及实例列表

#define _UNICODE /*主要对C标准库函数,将宏替换为宽字节形式*/ #define UNICODE /*主要对Windows API标准函数,将函数宏替换为宽字节形式*/ #define WIN32_LEAN_AND_MEAN 1 #include #include #include #include #include /*存放PDH函数返回的错误代码*/ #includ

zzidea的专栏 801

从接线到组态:手把手教你搞定PROFIBUS-DP与PA的混合网络搭建(基于西门子TIA Portal)

本文详细介绍了PROFIBUS-DP与PA混合网络的搭建方法,基于西门子TIA Portal平台,从硬件选型、网络架构设计到组态配置和现场调试,提供了一套完整的实战指南。重点解析了DP/PA耦合器的使用、地址映射策略及网络诊断技巧,帮助工程师高效构建高可靠性的工业自动化网络。

weixin_32103009的博客 301

化工设计软件:PDMS二次开发_(7).数据导入与导出技术

在某些复杂场景下,PDMS提供的标准API接口可能无法满足需求。此时,可以通过自定义API接口来实现特定的数据导入与导出功能。自定义设备导入API接口可以处理更复杂的设备数据格式。# 导入必要的库import pdms_api # 假设有一个PDMS API库# 定义自定义设备数据# 自定义设备导入API接口# 调用自定义设备导入API接口# 输出导入成功的消息print("自定义设备数据导入成功")在PDMS二次开发中,数据的导入与导出是关键的技术环节。

kkchenjj的博客 1484

使用PDH获取windows状态

PDH使用

wangcg123的专栏 3666

一张图讲透银行个人外汇业务逻辑和实操

个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。

银行信息系统应用架构详解 288

用Pdh库获得CPU利用率

花了三天时间搞清楚了Pdh库中几个函数的具体用法,MSDN上只有解释,没有示例;网上查资料,也没能帮我解决问题,可能由于硬件和操作系统不同,网上提供的代码在我机器上不能运行,具体是哪的错误网上没有查到相关资料。无计可施的时候,一次无聊的尝试,成功了,然后顿悟。现整理如下: 可以用Pdh(performance data helper)库提供的一些函数来获取系统当前的一些性能数据(也可以读取日

zxy355的专栏 1060

SI案例分享--FPC(柔性电路板)信号仿真

设计高性能的柔性PCB时,由于采用了网格地的参考面构造,因此,需要按照特定的结构进行布局,才可以保证所需目标阻抗的稳定性,该结构的配置过程称为“Hatch Configuration”,合理的参数配置将有助于得到满意的设计效果。

一只豌豆象的博客 2826

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Windows Performance Info

下面介绍如何远程取得  Windows Performance Info一.性能计数器简介:系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计 Windows 系统各项性能指标的东西。在 Windows 2000 及以上系统中,如果是默认安装就会自带性能计数器程序,大家可以在 “控制面板 -〉管理 -〉性能”中看到该程序。Windows 系统性能计

勿以恶小而为之,勿以善小而不为 998

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

windows下使用性能计数器遇到的坑

性能计数器简介 Microsoft Windwos NT/2000 提供了一个强大的API集来访问系统事件和性能数据的众多计数器。我们既可以实时地得到计数器的值,也可以从一个日志文件中读取计数器数据。功能可为强大,而且使用简单。 可以用来做什么 可以用来监控记录当前 CPU 的使用率、memory 使用率、CPU 占有率 、memory 占有率,获取系统和进程的物理内存,虚拟内存,线程数,句柄数,CPU,网络利用率,磁盘读写速率等。总之,很强大。windows下可以通过perfmon.msc调起系统的

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 2623

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言跨文件调用变量PDHH,枚举本地-远程NT系统进程

Windows2000中有个工具taskmgr.exe就可以比较详细的查看当前系统进程信息,但是那是Windows GUI程序,有时候是不是觉得命令行下的东西更方便呢?其实已经有不少命令行下的枚举系统进程的工具了,M$的Resource Kit中好象也有,但去了解他们是怎么实现的,自己动手做出来,是不是更有意思呢:)进程通常被定义为一个正在运行的程序的实例,它由两部分组成:<1>操作系...

weixin_30114977的博客 532

windows性能监视器 PDH的使用

一、概述 使用pdh,获取windows下CPU占用率、网络占用率、内存占用率、网络上下行速度等 二、所需头文件及库 包含可能所需的pdh相关头文件,windows下操作字符串所需头文件等 #include <Pdh.h> #include <PdhMsg.h> #include <IPHlpApi.h> #include <comutil.h> #include <tchar.h> #pragma comment(lib,"pd

m0_51668269的博客 1571

PdhCollectQueryData和获取系统信息

[code=C/C++]/************************************************************************************** * Source: cpucpu.c/cpp * Description: * This program can used to get the percen

欲穷千里目,更上一层楼 4308

Java小白学习之路(Java基础)Day07

Day07 面向对象 何谓面向对象? >面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 >面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。 面向对象的三大特征: >封装:封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,成为一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联系。 >继承:继承是软件重用的一种形式,它通过重用现有类

Java_狗的博客 770
上一篇: 获取PDH性能对象列表之一------------PDH简介
下一篇: SecureCRT 右键粘贴问题解决方法
我有梦之翼
博客等级 码龄17年 41粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值