CPU使用率を取得するには次の手順で行います。(戻る)
- パフォーマンス・データのハンドルを作成(PdhOpenQuery)
- ハンドル総数のカウンタパスを追加(PdhAddCounter)
- ハンドル総数のカウンタ値を取得(PdhCollectQueryData)
- パフォーマンス・データのハンドルを破棄(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 PdhCollectQueryData( PDH_HQUERY hQuery // 問い合わせハンドル ); PDH_STATUS PdhGetFormattedCounterValue( PDH_HCOUNTER hCounter, // カウンタのハンドル DWORD dwFormat, // 取得するデータ形式のフラグ LPDWORD lpdwType, // カウンタ種類のポインタ PPDH_FMT_COUNTERVALUE pValue // カウンタ構造体のポインタ );
構造体
typedef struct _PDH_FMT_COUNTERVALUE { DWORD CStatus; // カウンタのステータス union { LONG longValue; // LONG型のデータ double doubleValue; // DOUBLE型のデータ LONGLONG largeValue; // LONGLONG型のデータ LPCSTR AnsiStringValue; // LPCSTR型のデータ LPCWSTR WideStringValue; // LPCWSTR型のデータ }; } PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
サンプル
#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <pdh.h> // Pdh.Lib // メイン関数 int main( void ) { PDH_HQUERY hQuery; PDH_HCOUNTER hCounter; PDH_FMT_COUNTERVALUE fmtValue; if ( PdhOpenQuery(NULL,0,&hQuery) == ERROR_SUCCESS ){ PdhAddCounter( hQuery, TEXT("\\Processor(_Total)\\% Processor Time"), 0, &hCounter ); PdhCollectQueryData( hQuery ); while ( !_kbhit() ){ Sleep( 500 ); system( TEXT("CLS") ); PdhCollectQueryData( hQuery ); // double型の表示 PdhGetFormattedCounterValue( hCounter, PDH_FMT_DOUBLE, NULL, &fmtValue ); printf( TEXT("doubleValue = %.15f\n"), fmtValue.doubleValue ); // int64型の表示 PdhGetFormattedCounterValue( hCounter, PDH_FMT_LARGE, NULL, &fmtValue ); printf( TEXT("largeValue = %I64u\n"), fmtValue.largeValue ); // long型の表示 PdhGetFormattedCounterValue( hCounter, PDH_FMT_LONG, NULL, &fmtValue ); printf( TEXT("longValue = %u\n"), fmtValue.longValue ); } _getch(); PdhCloseQuery( hQuery ); return 0; } printf( TEXT("クエリーをオープンできません。\n") ); return 255; }
補足情報
- ヘッダファイルとして pdh.h をインクルードして下さい。
- インポートライブラリとして Pdh.Lib をリンクして下さい。
関連記事
- 電源状態の取得
- CPU使用率の取得
※コメント投稿者のブログIDはブログ作成者のみに通知されます