这里有一个类似的线程,我尝试自己实现它。即尝试使用 c++ 库获取服务器中运行的线程数。
我可以确切地知道 COUNTER_PATH 是什么吗?(例如,给定链接中的“\Process(*_)\Thread Count” )?用那个和 pid 号创建一个字符串是什么意思?
以下是我到目前为止所写的内容,但没有真正理解任何内容:
#include <windows.h>
#include <pdh.h> //and suppose there're other libraries as necessary...
CONST PWSTR COUNTER_PATH = L"\Process(*)\Thread Count";
int returnNumThreads()
{
HQUERY hQuery = NULL;
HCOUNTER hCounter;
DWORD counterType;
PDH_FMT_COUNTERVALUE counterValue;
PWSTR Paths = NULL;
PDH_STATUS pdhStatus = PdhOpenQuery(NULL, 0, &hQuery);
pdhStatus = PdhAddCounter(hQuery, COUNTER_PATH, 0, &hCounter);
pdhStatus = PdhCollectQueryData(hQuery);
pdhStatus = PdhGetFormattedCounterValue(hCounter,
PDH_FMT_LONG,
&counterType,
&counterValue);
return counterValue.longValue;
}
// **Here, I removed all the error checking codes such as
// "if (pdhStatus != ERROR_SUCCESS){...}" for better readability
**另外,上面链接中给出的解决方案是扩展通配符路径,但是当我检查PdhAddCounter 页面时,它说:“如果计数器路径包含通配符,所有匹配通配符的计数器名称都添加到查询”,所以我不确定是否真的需要扩展。
我一直在查看各种 示例,但我仍然不确定我是否正确地创建了查询或者仍然是 COUNTER_PATH 是什么。谁能给我一个解释?