介绍
项目中遇到需要检查网卡的速度的功能。
系统中查看网卡的速度可以通过如下方式:
-
查看网卡信息
-
通过命令行查看
wmic nic where netEnabled=true get name, speed
代码
#include <QCoreApplication>
#include <QDebug>
#include "Windows.h"
#include "iphlpapi.h"
#pragma comment(lib, "Iphlpapi.lib")
int getSpeedOnNetwork(const std::string &networkName)
{
DWORD speed = 0;
MIB_IFTABLE* pIfTable = (MIB_IFTABLE *) malloc(sizeof (MIB_IFTABLE));
if (pIfTable == NULL)
{
return speed;
}
/* 第一次调用 GetIfTable 获取必要信息写入*/
DWORD dwSize = sizeof (MIB_IFTABLE);
if (GetIfTable(pIfTable, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
{
free( pIfTable);
pIfTable = (MIB_IFTABLE *) malloc(dwSize);
if (pIfTable == NULL)
{
return 0;
}
}
DWORD dwRetVal = GetIfTable(pIfTable, &dwSize, FALSE);
if (dwRetVal == NO_ERROR)
{
/* 若为多网卡则分别获取接口列表*/
int num = (int) pIfTable->dwNumEntries;
for (int i = 0; i < num; i++)
{
auto pIfRow = (MIB_IFROW *) & pIfTable->table[i];
std::string desc = reinterpret_cast<char *>(pIfRow->bDescr);
if (desc == networkName)
{
speed = pIfRow->dwSpeed;
}
}
}
if (pIfTable != NULL)
{
free(pIfTable);
pIfTable = NULL;
}
return speed;
}
int main(int argc, char *argv[])
{
auto value = getSpeedOnNetwork("Realtek PCIe GbE Family Controller");
qInfo() << "speed:" << value / 1000 / 1000 << "Mbps";
return 0;
QCoreApplication a(argc, argv);
return a.exec();
}