0

これについて同様のスレッドがありましたhere、そして私はそれを自分で実装しようとしました。つまり、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 が何であるかはまだわかりません。誰か説明してくれませんか?

4

1 に答える 1

0

PdhAddCounter名前付きカウンターを開いているクエリに追加します。L"\Process(*)\Thread Count"はそんな名前です。\ファイル パスと同様に、構文が階層的 (パーツが で区切られている) であるため、「パス」名と見なされます。

ワイルドカードはProcess(Foo)Process(Bar)、 などのスレッド カウンターを追加して、すべてのプロセスの合計スレッド数をまとめて取得することを意味します。(foo.exe の 2 つのコピーを実行している場合、2 つ目は\Process(Foo#1)

于 2012-05-18T09:10:03.367 に答える