按照你这个示例得到的磁盘读写速度为nan
时间: 2024-03-07 07:50:21 浏览: 68
如果您得到的磁盘读写速度为 nan(Not a Number),可能是因为计数器的值超出了 PDH 库可以表示的范围。这个问题通常发生在磁盘 IO 活动非常繁忙的情况下。
要解决这个问题,您可以尝试使用 64 位整数类型来存储计数器的值。修改示例代码如下:
```C++
#include <iostream>
#include <pdh.h>
#pragma comment(lib, "pdh.lib")
int main()
{
PDH_STATUS status;
HQUERY hQuery;
HCOUNTER hCounter;
PDH_FMT_COUNTERVALUE counterValue;
// 打开查询
status = PdhOpenQuery(NULL, 0, &hQuery);
if (status != ERROR_SUCCESS) {
std::cout << "打开查询失败:" << status << std::endl;
return 1;
}
// 添加计数器
status = PdhAddCounter(hQuery, L"\\PhysicalDisk(_Total)\\Disk Read Bytes/sec", 0, &hCounter);
if (status != ERROR_SUCCESS) {
std::cout << "添加计数器失败:" << status << std::endl;
PdhCloseQuery(hQuery);
return 1;
}
// 查询计数器值
status = PdhCollectQueryData(hQuery);
if (status != ERROR_SUCCESS) {
std::cout << "查询计数器值失败:" << status << std::endl;
PdhCloseQuery(hQuery);
return 1;
}
// 获取计数器值
status = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LARGE, NULL, &counterValue);
if (status != ERROR_SUCCESS) {
std::cout << "获取计数器值失败:" << status << std::endl;
PdhCloseQuery(hQuery);
return 1;
}
// 输出计数器值
std::cout << "磁盘读速度:" << counterValue.largeValue << " 字节/秒" << std::endl;
// 关闭查询
PdhCloseQuery(hQuery);
return 0;
}
```
这里使用 PDH_FMT_LARGE 格式获取计数器的值,然后将其存储在 64 位整数类型中。注意,如果计数器的值超出了 64 位整数类型的表示范围,仍然会得到 nan 的结果。
阅读全文