亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 4613 | 回復(fù): 2
打印 上一主題 下一主題

PDH獲取CPU利用率統(tǒng)計(jì)不正確的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-06-24 14:37 |只看該作者 |倒序?yàn)g覽
windows下使用PDH獲取CPU的利用率,統(tǒng)計(jì)的數(shù)據(jù)很不正確,期待各位高手指點(diǎn)一二。代碼如下:

  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <stdio.h>
  4. #include <pdh.h>
  5. #include <conio.h>
  6. #pragma comment(lib, "pdh.lib")
  7. CONST ULONG SAMPLE_INTERVAL_MS    = 1000;
  8. int getCpuUsage(int flag){
  9.         HQUERY hQuery = NULL;
  10.         CONST ULONG SAMPLE_INTERVAL_MS    = 1000;
  11.         PDH_STATUS pdhStatus;

  12.         pdhStatus = PdhOpenQuery(NULL,NULL, &hQuery);  
  13.         if(pdhStatus != ERROR_SUCCESS) {
  14.                 return -1;  
  15.         }  
  16.         HCOUNTER hCounter;  
  17.         //if(flag)
  18.         {
  19. //                printf("2008 os\n");
  20. //                pdhStatus = PdhAddCounter(hQuery,"\\Processor(*)\\% Processor Time", 0, &hCounter);  
  21.         }
  22. //        else
  23.         {
  24.                 printf(" 2003 os and 2008 \n");
  25.                 PDH_COUNTER_PATH_ELEMENTS pcpe;  
  26.                 TCHAR szFullPathBuffer[MAX_PATH] = TEXT("");  
  27.                 DWORD dwSize = sizeof(szFullPathBuffer);  

  28.                 pcpe.szMachineName = TEXT("127.0.0.1");  
  29.                 pcpe.szObjectName = TEXT("Processor");  
  30.                 pcpe.szInstanceName = TEXT("_Total");  
  31.                 pcpe.szCounterName = TEXT("% Processor Time");  
  32.                 pcpe.dwInstanceIndex = -1;  
  33.                 pcpe.szParentInstance = NULL;  

  34.                 pdhStatus = PdhMakeCounterPath(&pcpe, szFullPathBuffer, &dwSize, 0);  
  35.                 if(pdhStatus != ERROR_SUCCESS) {  

  36.                         goto exit_prog;  
  37.                 }
  38.                 pdhStatus = PdhAddCounter(hQuery, szFullPathBuffer, 0, &hCounter);
  39.                 //pdhStatus = PdhAddCounter(hQuery,"\\Processor(_Total)\\% Processor Time", 0, &hCounter);
  40.                 //pdhStatus = PdhAddCounter(hQuery, _TEXT ( "Processor(_Total)\\%Processor Time" ), 0, &hCounter);         
  41.                 //pdhStatus = PdhAddCounter(hQuery,"\\SUPER\\Processor(_Total)\\% Processor Time", 1, &hCounter);
  42.         }


  43.         if(pdhStatus != ERROR_SUCCESS) {  

  44.                 goto exit_prog;  
  45.         }  
  46.         pdhStatus = PdhCollectQueryData(hQuery);
  47.         if(pdhStatus != ERROR_SUCCESS) {  

  48.                 goto exit_prog;  
  49.         }
  50.         PDH_FMT_COUNTERVALUE pfc;  
  51.         DWORD dwOpt;
  52.         Sleep(SAMPLE_INTERVAL_MS);
  53.         pdhStatus = PdhCollectQueryData(hQuery);
  54.         Sleep(100);
  55.         pdhStatus = PdhCollectQueryData(hQuery);
  56.                 Sleep(100);
  57.         pdhStatus = PdhCollectQueryData(hQuery);
  58.                 Sleep(100);
  59.         pdhStatus = PdhCollectQueryData(hQuery);
  60.                 Sleep(100);
  61.         pdhStatus = PdhCollectQueryData(hQuery);
  62.                 Sleep(100);
  63.         pdhStatus = PdhCollectQueryData(hQuery);
  64.                 Sleep(100);
  65.         pdhStatus = PdhCollectQueryData(hQuery);
  66.                 Sleep(100);
  67.         pdhStatus = PdhCollectQueryData(hQuery);
  68.                 Sleep(100);
  69.         pdhStatus = PdhCollectQueryData(hQuery);
  70.                 Sleep(100);
  71.         pdhStatus = PdhCollectQueryData(hQuery);
  72.                 Sleep(100);
  73.         pdhStatus = PdhCollectQueryData(hQuery);
  74.                 Sleep(100);
  75.         pdhStatus = PdhCollectQueryData(hQuery);
  76.                 Sleep(100);
  77.         pdhStatus = PdhCollectQueryData(hQuery);
  78.                 Sleep(100);
  79.         pdhStatus = PdhCollectQueryData(hQuery);
  80.                 Sleep(100);
  81.         pdhStatus = PdhCollectQueryData(hQuery);
  82.                 Sleep(100);
  83.         pdhStatus = PdhCollectQueryData(hQuery);
  84.                 Sleep(100);
  85.         pdhStatus = PdhCollectQueryData(hQuery);
  86.                 Sleep(100);
  87.         pdhStatus = PdhCollectQueryData(hQuery);
  88.                 Sleep(100);
  89.         pdhStatus = PdhCollectQueryData(hQuery);
  90.                 Sleep(100);
  91.         pdhStatus = PdhCollectQueryData(hQuery);
  92.                 Sleep(100);
  93.         pdhStatus = PdhCollectQueryData(hQuery);
  94.                 Sleep(100);
  95.         pdhStatus = PdhCollectQueryData(hQuery);
  96.                 Sleep(100);
  97.         pdhStatus = PdhCollectQueryData(hQuery);
  98.                 Sleep(100);
  99.         pdhStatus = PdhCollectQueryData(hQuery);
  100.                 Sleep(100);
  101.         pdhStatus = PdhCollectQueryData(hQuery);
  102.                 Sleep(100);
  103.         pdhStatus = PdhCollectQueryData(hQuery);
  104.                 Sleep(100);
  105.         pdhStatus = PdhCollectQueryData(hQuery);
  106.         pdhStatus = PdhGetFormattedCounterValue(hCounter,PDH_FMT_LONG,NULL,&pfc);  

  107. //        pdhStatus = PdhGetFormattedCounterValue(hCounter,PDH_FMT_DOUBLE,&dwOpt,&pfc);  
  108.         if(pdhStatus == ERROR_SUCCESS) {
  109.                 if(hQuery) {

  110.                         PdhCloseQuery(hQuery);
  111.                 }
  112.                 //wprintf(L",\"%.20g\n", pfc.doubleValue);
  113.                 printf("long value is %u\n",pfc.longValue);
  114.                 //int ret = (int)((pfc.doubleValue*100)+0.5)/100.0;
  115.                 int ret = (int)(pfc.doubleValue + 0.5);
  116.                 //printf("ret is %d\n",ret);
  117.                         return ret;
  118.         }
  119.         else
  120.         {


  121.                 goto exit_prog;
  122.         }
  123. exit_prog:
  124.         if(hQuery)
  125.                 PdhCloseQuery(hQuery);  
  126.         return -1;


  127. }

  128. int main(void){

  129. while (1)
  130. int ret = getCpuUsage(0);
  131. return 0;


  132. }
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-06-24 14:39 |只看該作者
資源管理器看到的利用率是36%,統(tǒng)計(jì)出來的是74左右。系統(tǒng)是多核的。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-06-24 14:57 |只看該作者
是不是發(fā)錯(cuò)地方了?有人看沒人回呀。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP