如何在 C++ 中使用 Win32_PerfRawData_Tcpip_NetworkInterface 类获取当前带宽

Posted

技术标签:

【中文标题】如何在 C++ 中使用 Win32_PerfRawData_Tcpip_NetworkInterface 类获取当前带宽【英文标题】:how to use Win32_PerfRawData_Tcpip_NetworkInterface class to get the current bandwidth in C++ 【发布时间】:2010-11-15 11:30:12 【问题描述】:

我想知道如何使用 Win32_PerfRawData_Tcpip_NetworkInterface 类来获取当前带宽。 我想从一开始就知道。我正在使用 xp,Microsoft Visual C++ 2005 Express Edition。我不知道如何使用。

【问题讨论】:

“使用”我假设您的意思是“消费”而不是“提供?” 【参考方案1】:

您可能会发现直接使用Performance Counters API 获取所需数据比通过WMI 更容易。分步说明是here。

创建查询并添加后 反对它,打电话给 PdhCollectQueryData 函数 检索所有的当前原始数据 查询中的计数器。

许多计数器,例如费率计数器, 需要两个数据样本来计算 格式化的数据值。 PDH 维护 当前样本的数据和 以前收集的样本。这 以下过程描述了如何 收集需要的计数器值 两个样本来计算一个可显示的 价值。

这两个 API 都很复杂,这里没有简单的方法。

【讨论】:

我有一个代码,它使用性能计数器,但我得到一个错误,“PdhCollectQueryData failed\n”,即。没有数据 。我已经检查了系统中的“性能”,我们​​得到了“\\Network Interface(%s)\\Current Bandwidth”,但是为什么我会收到这个错误。请帮忙。谢谢 PWSTR COUNTER_PATH = "\\Network Interface(NVIDIA nForce Networking Controller - PacketScheduler Miniport)\\Current Bandwidth" 我正在使用但我没有得到 我想获得上传和下载带宽。使用性能计数器我只得到 10000000 作为值。请告诉我如何获得上传和下载带宽。谢谢【参考方案2】:

您应该改用 *Win32_PerfFormattedData_Tcpip_NetworkInterface*,原始计数器需要在使用前进行处理,这是一项不平凡的任务。

可能会感兴趣以下属性:

BytesReceivedPerSec、BytesSentPerSec、CurrentBandwidth(计算利用率)、BytesTotalPerSec

【讨论】:

以上是关于如何在 C++ 中使用 Win32_PerfRawData_Tcpip_NetworkInterface 类获取当前带宽的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Win32 上开始使用 C++ 编程?

如何使用 Win32 句柄在 C++ 中获取文件名? [复制]

如何在win32 C++控制台应用程序中调用uwp类库

c++宏变量的问题

c++ win32输出一个文本

在 windows 中使用互斥锁进行进程间同步(win32 或 C++)