Подсчет количества потоков на сервере Windows; встречный путь

Здесь была похожая тема, и я попытался реализовать это сам. т.е. пытаться получить количество потоков, запущенных на сервере, используя библиотеку 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. Кто-нибудь может дать мне объяснение?

1 ответ

Решение

PdhAddCounter добавляет именованные счетчики в открытый запрос. L"\Process(*)\Thread Count" такое имя Это имя называется "путь", поскольку его синтаксис является иерархическим (части, разделенные \), аналогично путям к файлам.

Подстановочный знак означает, что вы хотите добавить счетчики потоков для Process(Foo), Process(Bar)и т.д., чтобы получить общее количество потоков для всех процессов вместе. (Если вы используете две копии файла foo.exe, второй \Process(Foo#1)

Другие вопросы по тегам