2012-06-08 5 views
1

Windows의 perfmon 카운터 (카테고리, 카운터 이름 및 인스턴스 이름)를 읽는 C++ 코드를 얻을 수 있습니까?windows perfmon 카운터를 읽는 방법?

C#에서는 매우 간단하지만 C++ 코드가 필요했습니다.

감사

+0

내 친구의 블로그 게시물을 확인하십시오. 우리는이 코드를 일부 내부 도구에 사용합니다. http://askldjd.wordpress.com/2011/01/05/a-pdh-helper-class-cpdhquery/ –

+0

고마워요.하지만 저는 하나의 카운터 값을 읽는 코드를 찾고 있습니다. 와일드 카드로 질의하고 싶지 않습니다. 예를 들어 다음 카운터를 읽어야합니다. \\ 프로세서 정보 (_Total) \ % 프로세서 시간 – RedFox

답변

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

는 % 커밋 된 바이트를 얻으려면 :

counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\Memory\\% Committed Bytes In Use"))); 

데이터를 얻으려면, 이렇게.

double data = counter->CollectSingleData(); 

이 정보가 도움이되기를 바랍니다.

... 알란

0

일반적으로 사용되는 성능 값의 일부는 API가 직접 얻기 위해 호출해야합니다. 예를 들어, 총 프로세서 시간은 GetSystemTimes에서 얻을 수 있으며 직접 백분율을 계산할 수 있습니다.

이 옵션이 아니면 Performance Data Helper 라이브러리는 성능 데이터에 알맞게 간단한 인터페이스를 제공합니다.

관련 문제