C++ 使用 PdhAddCounter 获取特定进程网络发送和接收速率
C++ 使用 PdhAddCounter 获取特定进程网络发送和接收速率
本文将介绍如何使用 C++ 和 Windows API 函数 PdhAddCounter 获取特定进程的网络发送和接收速率。
步骤
-
创建性能数据查询对象: 使用
PdhOpenQuery函数创建一个性能数据查询对象。cpp PDH_HQUERY hQuery; PdhOpenQuery(NULL, 0, &hQuery); -
创建性能计数器: 使用
PdhAddCounter函数为网络发送和接收速率创建性能计数器。cpp PDH_HCOUNTER hCounterSent, hCounterReceived; PdhAddCounter(hQuery, '\Process(<进程名>)\IO Data Bytes/sec', 0, &hCounterSent); PdhAddCounter(hQuery, '\Process(<进程名>)\IO Other Bytes/sec', 0, &hCounterReceived);将
<进程名>替换为要监控的进程名称。 -
收集性能计数器数据: 使用
PdhCollectQueryData函数收集性能计数器数据。cpp PdhCollectQueryData(hQuery); -
获取计数器值: 使用
PdhGetFormattedCounterValue函数获取计数器的当前值。double sentRate = counterValueSent.doubleValue; double receivedRate = counterValueReceived.doubleValue; ```
现在,sentRate 和 receivedRate 变量分别包含特定进程的网络发送和接收速率。
代码示例cpp#include <windows.h>#include <pdh.h>#include
int main() { // 初始化性能数据查询 PDH_HQUERY hQuery; PdhOpenQuery(NULL, 0, &hQuery);
// 添加网络发送和接收速率计数器 PDH_HCOUNTER hCounterSent, hCounterReceived; PdhAddCounter(hQuery, '\Process(notepad)\IO Data Bytes/sec', 0, &hCounterSent); PdhAddCounter(hQuery, '\Process(notepad)\IO Other Bytes/sec', 0, &hCounterReceived);
// 收集性能数据 PdhCollectQueryData(hQuery);
// 获取计数器值 PDH_FMT_COUNTERVALUE counterValueSent, counterValueReceived; PdhGetFormattedCounterValue(hCounterSent, PDH_FMT_DOUBLE, NULL, &counterValueSent); PdhGetFormattedCounterValue(hCounterReceived, PDH_FMT_DOUBLE, NULL, &counterValueReceived);
// 打印网络发送和接收速率 std::cout << '发送速率: ' << counterValueSent.doubleValue << ' 字节/秒' << std::endl; std::cout << '接收速率: ' << counterValueReceived.doubleValue << ' 字节/秒' << std::endl;
// 清理资源 PdhCloseQuery(hQuery);
return 0;}
注意:
- 将代码示例中的
notepad替换为你要监控的进程名称。* 以上代码片段仅供参考,实际应用中需要进行错误处理。* 使用该代码需要包含pdh.h头文件,并链接pdh.lib库。
原文地址: https://www.cveoy.top/t/topic/fSxV 著作权归作者所有。请勿转载和采集!