如何在 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 类获取当前带宽的主要内容,如果未能解决你的问题,请参考以下文章