windows平台下获取实时网速
一般而言,获取系统实时网速有三种方法:PDH、WMI以及各平台API。
我暂时采用的是平台API,很容易就能搜索到GetIfTable这个API,MSDN参考地址:这里
MSDN提供的例子使用静态调用,但是静态调用需要用到lib文件,包含某些头文件,不如直接使用动态调用干净清爽。
测试的时候发现,与实际网速并不相符,差不多多了6-8倍的样子,这时候很容易联想到bit和byte的8倍关系,但是经过确认之后,API获取到的数据就是字节数。
这个问题困扰了我几天,导致我开始尝试GetIfTable2(1个坑,没有调用成功过)。
后来又再次审核MSDN的参考文档,发现了流量数据的type,终于找到了重复计数的原因:无关网卡类型累计计数。参考代码如下
//网卡中凡带有Virtual、Fliter和Qos的,都是不需要计数的网卡
MIB_IFROW Row = m_pTable->table[i];
Desc = QString::fromLatin1((char*)Row.bDescr, Row.dwDescrLen - 1);
if(false == Desc.contains("Virtual")
&& false == Desc.contains("Filter")
&& false == Desc.contains("QoS")) {
NowIn = NowIn + Row.dwInOctets;
NowOut = NowOut + Row.dwOutOctets;
}
代码来源:qtresmonitor