计算Windows服务器上的线程数;反路径

时间:2012-05-17 21:26:15

标签: c++ windows pdh

有一个关于这个here的类似帖子,我试图自己实现它。即尝试使用c ++库获取服务器中运行的线程数。

我可以准确知道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时,它说:“如果计数器路径包含通配符,则所有计数器名称都匹配通配符添加到查询中,“所以我不确定是否真的需要扩展。

我一直在关注various examples,但我还不确定我是在正确创建查询还是仍然是COUNTER_PATH。有人可以给我一个解释吗?

1 个答案:

答案 0 :(得分:0)

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

通配符表示您要为Process(Foo)Process(Bar)等添加线程计数器,以便将所有进程的线程总数加在一起。 (如果您正在运行两个foo.exe副本,则第二个是\Process(Foo#1)