マルチコアのCPU使用率の取得

[戻る]
Solar 2009/05/07(木) 11:04:41
VC2008 SDKにて自アプリのCPU使用率を取得したく色々調べてます。

初期段階の設定で
HQUERY hQuery;
HCOUNTER hCounter;
PDH_FMT_COUNTERVALUE FmtValue;

PdhOpenQuery(NULL, 0, &hQuery);
PdhAddCounter(hQuery, L"\\Process(hoge)\\% Processor Time", 0, &hCounte);
PdhCollectQueryDataEx(hQuery,1,NULL);

とし、タイマーで定期的に
PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &FmtValue);
を実行し
FmtValueのlongValueの値を見てみました。

負荷をかけるスレッドを1つ起動して、タスクマネージャーの値と見比べると
タスクマネージャーでは当然ですが、CPU使用率が50%となりました。
しかし、この時上記記述では100として取得しました。
負荷を色々変えて実験したら、タスクマネージャーで表示されるCPU使用率の2倍の
値を取得してるようです。
1つのコアの使用率としては正解なのですが、タスクマネージャーで表示されている
CPU使用率を取得したいと思ってます。

ちなみに負荷をかけるスレッドを2つ用意し1つは100%、もう1つは80%の負荷として
動作させたらタスクマネージャーでは90%と表示されますが、上記コードでは
やはり100として取得しています。

色々調べた結果
PdhAddCounter(hQuery, L"\\Thread(hoge/0)\\% Processor Time", 0, &hCounte);
PdhAddCounter(hQuery, L"\\Thread(hoge/1)\\% Processor Time", 0, &hCounte);
とすればスレッド単位でのCPU使用率が取得できるので、これから計算すれば正しい
CPU使用率が算出できるのですが、スレッド数を意識せずトータルのCPU使用率を
取得できる方法はないでしょうか?

古いスレッドには追加発言できません。