プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

ハンドル/スレッド総数の取得

2007年10月07日 09時16分54秒 | パフォーマンス関連

ハンドル総数やスレッドの総数を取得するには次の手順で行います。(戻る)

  1. パフォーマンス・データのハンドルを作成(PdhOpenQuery)
  2. ハンドル総数のカウンタパスを追加(PdhAddCounter)
  3. ハンドル総数のカウンタ値を取得(PdhCollectQueryData)
  4. ハンドル総数のカウンタパスを削除(PdhRemoveCounter)
  5. スレッド総数のカウンタパスを追加(PdhAddCounter)
  6. スレッド総数のカウンタ値を取得(PdhCollectQueryData)
  7. スレッド総数のカウンタパスを削除(PdhRemoveCounter)
  8. パフォーマンス・データのハンドルを破棄(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をリンクして下さい。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« カウンタとインスタンスの列挙 | トップ | CPU使用率の取得 »
最新の画像もっと見る

コメントを投稿

パフォーマンス関連」カテゴリの最新記事