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使用率を
取得できる方法はないでしょうか?