1

Windowsのperfmonカウンター(カテゴリ、カウンター名、インスタンス名)を読み取るためのC ++コードを取得できますか?

c#では非常に簡単ですが、c++コードが必要でした。

ありがとう

4

2 に答える 2

4

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();

これが役立つことを願っています。

...アラン

于 2012-06-09T01:55:34.040 に答える
0

一般的に使用されるパフォーマンス値の一部には、それらを直接取得するための API 呼び出しがあります。たとえば、総プロセッサ時間はGetSystemTimesから取得でき、パーセンテージを自分で計算できます。

これができない場合は、Performance Data Helperライブラリがパフォーマンス データへの適度に単純なインターフェイスを提供します。

于 2012-06-08T21:11:03.613 に答える