2012-05-17 30 views
0

还有一个关于here的类似线程,我试图自己实现它。即尝试使用C++库获取在服务器中运行的线程数。计算Windows服务器上的线程数量;计数器路径

我可以确切知道COUNTER_PATH是什么吗? (例如给定的link中的“\ 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 page,它说:“如果计数器路径包含通配符,则所有匹配通配符的计数器名称都会添加到查询中,”所以我不确定扩展是否真的需要。

我一直在寻找variousexamples,但我不确定是否正确创建查询或仍然是什么COUNTER_PATH是。有人可以给我一个解释吗?

+0

你可能想要'PdhAddEnglishCounter'。Ì当他们梦想着'PdhAddCounter'时不知道他们在吸烟什么。 ''\ Proces(opera)\ Piekwaarde德文字节“'意思?? – MSalters

回答

0

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

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

+0

这是否意味着为了获得特定于某个进程的线程数,例如pid#12,COUNTER_PATH应该是”\ Process(12) \ Thread Count“? – user945216

+0

澄清:您传递的程序名称为 – MSalters

+0

这个信息可以在http://technet.microsoft.com/en-us/library/cc780836%28v=ws.10%29找到,虽然问题尚未解决,我会研究它.. – user945216