PdhGetFormattedCounterValue返回-1073738810
时间: 2023-07-05 09:34:33 浏览: 50
PdhGetFormattedCounterValue 函数返回 -1073738810 表示 PDH_INVALID_DATA 错误,这通常表示无法获取有效的计数器值。
可能的原因包括:
1. 计数器路径或实例名称不正确。请确认计数器路径和实例名称是否正确,并且计数器实例是否存在。
2. 计数器值无效或未准备就绪。请等待一段时间后再次尝试获取计数器值。
3. 没有足够的权限来访问计数器。请使用管理员权限运行程序,或者将当前用户添加到与计数器相关的性能监视器用户组中。
4. 计算机上存在其他性能监视器软件,如 McAfee 等。这些软件可能会干扰性能计数器的工作。
您可以使用 PdhGetLastError 函数获取更详细的错误信息,以帮助确定问题的原因。
相关问题
PdhGetFormattedCounterValue这个获取计数器会失败
PdhGetFormattedCounterValue 获取计数器值失败的原因可能有很多,可能是计数器不存在、计数器路径错误、查询未开启或者指定的计数器格式不正确等。
您可以先确认计数器路径是否正确,可以通过 Perfmon.exe 工具来查看计数器路径是否正确,并检查计数器名称是否与代码中添加的计数器名称一致。
如果计数器路径正确,可以尝试使用 PdhGetLastError 函数获取详细的错误信息,以便更好地定位问题。
另外,如果您使用的是自定义计数器,可能需要等待一段时间才能获取到有效的计数器值。可以尝试延迟几秒钟后再次尝试获取计数器值。
main.cpp:48:14: error: no matching function for call to 'PdhGetFormattedCounterValue' pdh.h:408:1: note: candidate function not viable: no known conversion from 'DWORD *' (aka 'unsigned long *') to 'PPDH_FMT_COUNTERVALUE' (aka '_PDH_FMT_COUNTERVALUE *') for 4th argument
这个错误是因为第四个参数应该是一个指向 PDH_FMT_COUNTERVALUE 结构体的指针,但您传递了一个 DWORD 类型的指针。您需要修改代码,将第四个参数改为一个指向 PDH_FMT_COUNTERVALUE 结构体的指针,同时修改第五个参数为 PDH_FMT_LARGE,以获取大整数格式的计数器值。
修改后的代码如下:
```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 格式获取计数器值,可以获取到大整数格式的计数器值。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)