C++ 正在计算windows服务器上的线程数;反向路径

C++ 正在计算windows服务器上的线程数;反向路径,c++,windows,pdh,C++,Windows,Pdh,关于这一点,也有一个类似的线索,我试图自己实现它。即尝试使用C++库获取服务器中运行的线程数。 我可以确切地知道计数器路径是什么吗?(例如,给定中的“\Process(*\ux)\Thread Count”)?用它和pid数字组成一个字符串意味着什么 以下是我到目前为止写的东西,但我没有真正理解: #include <windows.h> #include <pdh.h> //and suppose there're other libraries as necessar

关于这一点,也有一个类似的线索,我试图自己实现它。即尝试使用C++库获取服务器中运行的线程数。 我可以确切地知道计数器路径是什么吗?(例如,给定中的“\Process(*\ux)\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
#包括
#包括//并假设有其他必要的库。。。
CONST PWSTR COUNTER_PATH=L“\Process(*)\Thread Count”;
int returnNumThreads()
{
HQUERY HQUERY=NULL;
HCOUNTER HCOUNTER;
德沃德计数器类型;
PDH_FMT_计数器值计数器值;
PWSTR路径=NULL;
PDH_STATUS pdhStatus=PdhOpenQuery(NULL、0和hQuery);
pdhStatus=PdhAddCounter(hQuery、计数器路径、0和hCounter);
pdhStatus=PdhCollectQueryData(hQuery);
pdhStatus=PdhGetFormattedCounter值(hCounter,
PDH_FMT_LONG,
&计数器类型,
&对价);
返回counterValue.longValue;
}
//**在这里,我删除了所有错误检查代码,例如
//“if(pdhStatus!=ERROR_SUCCESS){…}”以提高可读性
**此外,上面链接中给出的解决方案表示扩展通配符路径,但当我检查时,它说:“如果计数器路径包含通配符,则所有与通配符匹配的计数器名称都将添加到查询中”,因此我不确定是否真的需要扩展


我已经看过了,但是我仍然不确定我是否正确创建了查询,或者计数器路径是什么。谁能给我解释一下吗?

PdhAddCounter
将命名计数器添加到打开的查询中
L“\Process(*)\Thread Count”
就是这样一个名称。它被认为是一个“路径”名称,因为它的语法是分层的(由
\
分隔的部分),类似于文件路径


通配符意味着您要为
进程(Foo)
进程(Bar)
等添加线程计数器,以获得所有进程的线程总数。(如果您正在运行两个foo.exe副本,第二个副本是
\Process(foo#1)

,这是否意味着为了获得特定于进程的线程数,例如pid#12,计数器路径应该是“\Process(12)\Thread Count”?澄清:你传递程序名。虽然问题还没有解决,但是可以在上找到信息。我会调查一下。你可能想要
PdhAddEnglishCounter
。不知道他们梦见
PdhAddCounter
时抽的是什么。世界上谁知道
“\Proces(opera)\Piekwaard virtuele字节“
表示??