使用PDH性能计数器(Windows)获取CPU使用率、可用物理内存、上传/下载速率、磁盘读写速率

最近要写一个windows下的监控客户端,需要收集计算机的一些信息。

其中CPU使用率、可用物理内存(用于计算内存使用率)、上传/下载速率、磁盘读写速率,都需要实时的。各种资料查询之后,决定使用pdh性能计数器来做。

下面直接贴实现函数。需要注意的有几点:1、首先需要导入pdh的lib库;2、注意接收pdh函数的返回值,判断程序运行状态;3、需求是要收集实时值,所以开一个线程,每秒调用一次实现函数即可;4、在通过pdh函数获取数据时,需要延时,否则会导致数据不准确;5、网速的查询是特别的,因为查询语句中会带有网络适配器的名称,也就是网卡名,对于多张网卡的情况,需要自行确定走的是哪个网卡。而不同计算机名称都会不同,所以将该变量放在配置文件中,以保证代码的一致。

还有个疑问,不知道为什么PdhCollectQueryData()需要调用两次,调用一次收集会失败。

最后收集的数据放在结构体中,并压入队列,等待上传到服务端。目前实现是每收集到一组数据就上传一次,当然也可以通过链表长度和时间来控制上传频率。


由于数据最终是以二进制流的方式上传到服务端,所以结构体定义成了类的形式,带了打包、解包函数。如下:

//用于保存搜集的实时数据
class RealtimeData : public MY_OBJECT
{
public:
	int	iCPUUsage;			// CPU使用率
	double	dbDownloadSpeed;		// 下载速率
	double	dbUploadSpeed;			// 上传速率
	int	iMemory;			// 可用内存(M)
	double	dbDiskRead;			// 磁盘读速率
	double	dbDiskWrite;			// 磁盘写速率
	INT64	time;				// 本次搜集的本机时间


public:
	//把内部结构打包成char*格式的扁平格式
	//外部需
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值