Windows NT 系の CPU 使用率

PDH (Performance Data Helper) API によって CPU 使用率を取得する.
プログラムをビルドするためには pdh.lib をリンクする必要がある.

#include 
#include 
#include 

int main(void)
{
    HQUERY      hQuery;
    HCOUNTER    hCounter;
    PDH_FMT_COUNTERVALUE    fmtValue;

    /* 新しいクエリーを作成 */
    PdhOpenQuery(NULL, 0, &hQuery);

    /* CPU 使用率のカウンタをクエリーに追加 */
    PdhAddCounter(hQuery, "\\Processor(0)\\% Processor Time", 0, &hCounter);

    /* 計測準備 */
    /* 出力される CPU 使用率はある時間間隔の平均値なので
       少なくとも 2 回 PdhCollectQueryData を呼び出す必要がある */
    PdhCollectQueryData(hQuery);

    Sleep(1000);

    /* 計測 */
    PdhCollectQueryData(hQuery);

    /* 計測値を整数で取得 */
    PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &fmtValue);
    printf("%d\n", fmtValue.longValue);

    /* クエリーを閉じる */
    PdhCloseQuery(hQuery);

    return 0;
}

CPU 使用率はクエリーを閉じるまで何度でも測定することができる.
PdhAddCounter に与えるカウンタパスを変更すれば CPU 使用率以外のパフォーマンスも知ることができる.
PdhCollectQueryData はカウンタを更新する関数で,CPU 使用率を知るためには 2 回呼び出す必要がある.
PdhGetFormattedCounterValue は 32 ビット整数の他に double や 64 ビット整数で取得することもできる.

  • 参考ページ

MSDN Library 「続・知る権利」