0
タスクマネージャに示すようにネットワークアダプタの使用率を取得しようとしています。 私はWMIを使用しようとしましたが、毎秒送信されるバイト/バイトを受信できます。タスクマネージャ(0-100%)に表示されている計算済みの値を取得する方法はありますか、またはこれらを使用してその値を計算することはできますか?C++はタスクマネージャのようなネットワーク利用を得ます
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
cout << "Query for operating system name failed."
<< " Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
}
// Get the data from the query
IWbemClassObject *pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if (0 == uReturn)
{
break;
}
VARIANT vtProp;
VariantInit(&vtProp);
hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
wcout << " network adapter : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);
hr = pclsObj->Get(L"BytesReceivedPerSec", 0, &vtProp, 0, 0);
wcout << " BytesReceivedPerSec : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);
hr = pclsObj->Get(L"BytesSentPerSec", 0, &vtProp, 0, 0);
wcout << " BytesSentPerSec : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);
hr = pclsObj->Get(L"Timestamp_Sys100NS", 0, &vtProp, 0, 0);
wcout << " Timestamp_Sys100NS : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);
pclsObj->Release();
}
しかし、この計算では、ネットワークトラフィックがあまり多くない場合でも、97%以上の割合でこの計算が行われています。 – user1754598
私の悪いですが、デフォルトのスケールは-6 ...ビット/ sです –
ありがとうございました。あなたのサポートのためにありがとうございます。この例はC#のためのものですが、それはタスクマネージャーのために行われたようです。私はこれをC++で試すhttps://web.archive.org/web/20080315235958/http://nayyeri.net/blog/how-to-calculate-network-utilization-in-net/ – user1754598