【发布时间】:2013-11-26 19:11:41
【问题描述】:
class Win32_PerfRawData_Tcpip_NetworkInterface : Win32_PerfRawData
{
uint32 BytesReceivedPerSec;
uint32 BytesSentPerSec;
uint64 BytesTotalPerSec;
string Caption;
uint32 CurrentBandwidth;
string Description;
uint64 Frequency_Object;
uint64 Frequency_PerfTime;
uint64 Frequency_Sys100NS;
string Name;
uint32 OutputQueueLength;
uint32 PacketsOutboundDiscarded;
uint32 PacketsOutboundErrors;
uint32 PacketsPerSec;
uint32 PacketsReceivedDiscarded;
uint32 PacketsReceivedErrors;
uint32 PacketsReceivedNonUnicastPerSec;
uint32 PacketsReceivedPerSec;
uint32 PacketsReceivedUnicastPerSec;
uint32 PacketsReceivedUnknown;
uint32 PacketsSentNonUnicastPerSec;
uint32 PacketsSentPerSec;
uint32 PacketsSentUnicastPerSec;
uint64 Timestamp_Object;
uint64 Timestamp_PerfTime;
uint64 Timestamp_Sys100NS;
};
这个 WMI 类。
我得到 PacketReceived/sec 但它的值高于 120000。 我认为它每秒接收的字节数。 我得到了其他值和正确的
int WMIClass::ExcuteQuery(const char* cstr,LPWSTR atrb)
{
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t(cstr),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
while (pEnumerator)
{
hres = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
// Get the value of the Name property
hres = pclsObj->Get(atrb, 0, &vtProp, 0, 0);
intVal=vtProp.uintVal;
}
return intVal;
}
程序正常执行,值可以轻松读取,但我对这个值有疑问。 我需要在网络适配器上每秒接收数据包。 有什么简单的解决办法吗?如果在 Qt 框架中,将不胜感激。
【问题讨论】:
-
我看不到
intVal的初始化位置,如果它是成员变量,您可能会遇到返回的先前值或返回未初始化内存的值。在您的代码中,您应该处理Get操作失败,无论是来自未知属性名称还是其他失败;如果失败,你应该返回一个错误值或抛出异常。
标签: c++ qt networking wmi