跳转到路径导航栏
跳转到正文内容

C++实现提取进程的CPU占用率

http://www.sina.com.cn  2008年12月21日 23:41  比特网ChinaByte

  在开发过程中,有时候我们需要调用特定进程的CPU占有率,以此来测试程序的可靠性,及资源占用等等,今天给大家共享一段通过C++实现的代码。 #include

  #include

  #include

  #include

  #include

  #pragma comment ( lib , "Pdh.lib" )

  #define MAXPATH 80

  int __cdecl _tmain (int argc, TCHAR **argv)

  {

  HQUERY hQuery;

  HCOUNTER *pCounterHandle;

  PDH_STATUS pdhStatus;

  PDH_FMT_COUNTERVALUE fmtValue;

  DWORD ctrType;

  CHAR szPathBuffer[MAXPATH] = {’\0’};

  int nRetCode = 0;

  // Open the query object.

  pdhStatus = PdhOpenQuery (0, 0, &hQuery);

  pCounterHandle = (HCOUNTER *)GlobalAlloc(GPTR, sizeof(HCOUNTER));

  /*

  \Processor(_Total)% Processor Time CPU使用率

  \System\Processes 当前系统进程数

  \System\Threads 当前系统线程数

  \Memory\Commit Limit 总共内存数K (包括虚拟内存)

  \Memory\Committed Bytes 已用内存数K (包括虚拟内存)

  \TCP\Connections Active 系统中已建立的 TCP连接个数

  \其它Object Items 可以利用PdhEnumObjects()和PdhEnumObjectItems()得到

  */

  // strcat(szPathBuffer,"\System\Processes");

  // pdhStatus = PdhAddCounter (hQuery, szPathBuffer, 0, pCounterHandle);

  //得到QQ进程的CPU占用率,这句出错

  pdhStatus = PdhAddCounter(hQuery,"\Process(QQ)% Processor Time",0,pCounterHandle);

  // "Prime" counters that need two values to display a

  // formatted value.

  pdhStatus = PdhCollectQueryData (hQuery);

  // Get the current value of this counter.

  pdhStatus = PdhGetFormattedCounterValue (*pCounterHandle, [Page]

  PDH_FMT_DOUBLE,

  &ctrType,

  &fmtValue);

  //fmtValue.doubleValue为所要的结果

  if (pdhStatus == ERROR_SUCCESS) {

  printf (TEXT(","%.20g"\n"), fmtValue.doubleValue);

  }

  else {

  // Print the error value.

  printf (TEXT("error."-1""));

  }

  // Close the query.

  pdhStatus = PdhCloseQuery (hQuery);

  return nRetCode;

  }

Powered By Google 感动2008,留下你最想说的话!

新浪简介About Sina广告服务联系我们招聘信息网站律师SINA English会员注册产品答疑┊Copyright © 1996-2008 SINA Corporation, All Rights Reserved

新浪公司 版权所有