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

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

カウンタとインスタンスの列挙

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

オブジェクト名から利用可能なカウンタとインスタンスを列挙するにはPdhEnumObjectItems()関数を使います。
この関数で取得した文字列はNULL文字で区切られて最後にはもう一つNULL文字が追加します。
つまり[aaa][\0][bbb][\0][ccc][\0][\0]というイメージになります。(戻る)

プロトタイプ宣言

PDH_STATUS PdhEnumObjectItems(
  LPCTSTR szDataSource,             // ログファイル名
  LPCTSTR szMachineName,            // コンピュータ名
  LPCTSTR szObjectName,             // オブジェクト名
  LPTSTR  mszCounterList,           // カウンタ・バッファ領域
  LPDWORD pcchCounterListLength,    // カウンタ・バッファ容量のポインタ
  LPTSTR  mszInstanceList,          // インスタンス・バッファ領域
  LPDWORD pcchInstanceListLength,   // インスタンス・バッファ容量のポインタ
  DWORD dwDetailLevel,              // 取得する詳細レベル
  DWORD dwFlags                     // 形式フラグ(常にゼロ)
);

サンプル

#include <stdio.h>
#include <windows.h>
#include <pdh.h>  // Pdh.Lib

// メイン関数
int main( void )
{
    TCHAR  szCounter[  32 * 1024 ];
    TCHAR  szInstance[ 32 * 1024 ];
    DWORD  dwCounterSize  = sizeof(szCounter);
    DWORD  dwInstanceSize = sizeof(szInstance);
    LPTSTR lpObject = "Process";
    LPTSTR lpString;
    INT     nCount;
    
    // オブジェクトのカウンタとインスタンスを取得
    PdhEnumObjectItems( NULL, NULL,
        lpObject,
        szCounter,  &dwCounterSize,
        szInstance, &dwInstanceSize,
        PERF_DETAIL_WIZARD, 0 );
    // オブジェクトのカウンタを列挙
    printf( "\nオブジェクトのカウンタ列挙\n" );
    for ( nCount = 0, lpString = szCounter ; *lpString != '\0' ; lpString++ ){
        printf( "%3d: [%s]\n", ++nCount, lpString );
        lpString += lstrlen( lpString );
    }
    // オブジェクトのインスタンスを列挙
    printf( "\nオブジェクトのインスタンス列挙\n" );
    for ( nCount = 0, lpString = szInstance ; *lpString != '\0' ; lpString++ ){
        printf( "%3d: [%s]\n", ++nCount, lpString );
        lpString += lstrlen( lpString );
    }
    return 0;
}
  • 上記の例ではProcessというオブジェクト名に対して利用できるカウンタとインスタンスを列挙しています。
  • 指定可能なオブジェクト名は前回の『オブジェクト名の列挙』で分かります。
  • オブジェクトによってはカウンタのみでインスタンスがない場合もあります。
  • ヘッダファイルとしてpdh.hをインクルードして下さい。
  • インポートライブラリとしてPdh.Libをリンクして下さい。

取得する詳細レベルには次の定数があります。

  1. 初心者ユーザーのレベル(PERF_DETAIL_NOVICE)
  2. 上級者ユーザーのレベル(PERF_DETAIL_ADVANCED)
  3. 専門家ユーザーのレベル(PERF_DETAIL_EXPERT)
  4. 設計者ユーザーのレベル(PERF_DETAIL_WIZARD)

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« オブジェクト名の列挙 | トップ | ハンドル/スレッド総数の取得 »
最新の画像もっと見る

コメントを投稿

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