これについて同様のスレッドがありました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 が何であるかはまだわかりません。誰か説明してくれませんか?