Windowsのperfmonカウンター(カテゴリ、カウンター名、インスタンス名)を読み取るためのC ++コードを取得できますか?
c#では非常に簡単ですが、c++コードが必要でした。
ありがとう
Windowsのperfmonカウンター(カテゴリ、カウンター名、インスタンス名)を読み取るためのC ++コードを取得できますか?
c#では非常に簡単ですが、c++コードが必要でした。
ありがとう
Doug T. が以前に指摘したように、私はパフォーマンス カウンターの値を照会するヘルパー クラスを少し前に投稿しました。このクラスの使用法は非常に単純で、パフォーマンス カウンターに文字列を指定するだけです。 http://askldjd.wordpress.com/2011/01/05/a-pdh-helper-class-cpdhquery/
ただし、ブログに投稿したコードは実際には変更されています。あなたのコメントから、単一のフィールドだけを照会することに興味があるようです。
この場合、CPdhQuery クラスに次の関数を追加してみてください。
double CPdhQuery::CollectSingleData()
{
double data = 0;
while(true)
{
status = PdhCollectQueryData(hQuery);
if (ERROR_SUCCESS != status)
{
throw CException(GetErrorString(status));
}
PDH_FMT_COUNTERVALUE cv;
// Format the performance data record.
status = PdhGetFormattedCounterValue(hCounter,
PDH_FMT_DOUBLE,
(LPDWORD)NULL,
&cv);
if (ERROR_SUCCESS != status)
{
continue;
}
data = cv.doubleValue;
break;
}
return data;
}
たとえば、プロセッサ時間を取得するには
counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\Processor Information(_Total)\% Processor Time")));
ファイル読み取りバイト/秒を取得するには:
counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\System\\File Read Bytes/sec")));
% Committed Bytes を取得するには:
counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\Memory\\% Committed Bytes In Use")));
データを取得するには、次のようにします。
double data = counter->CollectSingleData();
これが役立つことを願っています。
...アラン
一般的に使用されるパフォーマンス値の一部には、それらを直接取得するための API 呼び出しがあります。たとえば、総プロセッサ時間はGetSystemTimesから取得でき、パーセンテージを自分で計算できます。
これができない場合は、Performance Data Helperライブラリがパフォーマンス データへの適度に単純なインターフェイスを提供します。