ハンドル総数やスレッドの総数を取得するには次の手順で行います。(戻る)
- パフォーマンス・データのハンドルを作成(PdhOpenQuery)
- ハンドル総数のカウンタパスを追加(PdhAddCounter)
- ハンドル総数のカウンタ値を取得(PdhCollectQueryData)
- ハンドル総数のカウンタパスを削除(PdhRemoveCounter)
- スレッド総数のカウンタパスを追加(PdhAddCounter)
- スレッド総数のカウンタ値を取得(PdhCollectQueryData)
- スレッド総数のカウンタパスを削除(PdhRemoveCounter)
- パフォーマンス・データのハンドルを破棄(PdhCloseQuery)
プロトタイプ宣言
PDH_STATUS PdhOpenQuery( LPCTSTR szDataSource, // ログファイル名 DWORD dwUserData, // 問い合わせに結び付ける値 PDH_HQUERY *phQuery // 問い合わせハンドルのポインタ ); PDH_STATUS PdhCloseQuery( PDH_HQUERY hQuery // 問い合わせハンドル ); PDH_STATUS PdhAddCounter( PDH_HQUERY hQuery, // 問い合わせハンドル LPCTSTR szFullCounterPath, // カウンタパス文字列 DWORD_PTR dwUserData, // 問い合わせに結び付ける値 PDH_HCOUNTER *phCounter // カウンタのハンドル ); PDH_STATUS PdhRemoveCounter( IN HCOUNTER hCounter // カウンタのハンドル ); PDH_STATUS PdhCollectQueryData( PDH_HQUERY hQuery // 問い合わせハンドル ); PDH_STATUS PdhGetFormattedCounterValue( PDH_HCOUNTER hCounter, // カウンタのハンドル DWORD dwFormat, // 取得するデータ形式のフラグ LPDWORD lpdwType, // カウンタ種類のポインタ PPDH_FMT_COUNTERVALUE pValue // カウンタ構造体のポインタ );
サンプル
#include <stdio.h> #include <windows.h> #include <pdh.h> // Pdh.Lib // メイン関数 int main( void ) { PDH_HQUERY hQuery; PDH_HCOUNTER hCounter; PDH_FMT_COUNTERVALUE fntValue; if ( PdhOpenQuery(NULL,0,&hQuery) == ERROR_SUCCESS ){ // ハンドル総数 PdhAddCounter( hQuery, "\\Process(_Total)\\Handle Count", 0, &hCounter ); PdhCollectQueryData( hQuery ); PdhGetFormattedCounterValue( hCounter, PDH_FMT_LONG, NULL, &fntValue ); printf( "Handle Count = %6u 個\n", fntValue.longValue ); PdhRemoveCounter( hCounter ); // スレッド総数 PdhAddCounter( hQuery, "\\Process(_Total)\\Thread Count", 0, &hCounter ); PdhCollectQueryData( hQuery ); PdhGetFormattedCounterValue( hCounter, PDH_FMT_LONG, NULL, &fntValue ); printf( "Thread Count = %6u 個\n", fntValue.longValue ); PdhRemoveCounter( hCounter ); PdhCloseQuery( hQuery ); return 0; } printf( "クエリーをオープンできません。\n" ); return 255; }
- ヘッダファイルとしてpdh.hをインクルードして下さい。
- インポートライブラリとしてPdh.Libをリンクして下さい。
関連記事
- プロセス/スレッド数の取得
- ハンドル/スレッド総数の取得
※コメント投稿者のブログIDはブログ作成者のみに通知されます