执行下面代码DWORD CProcessInfo::GetCPUUsage(LPTSTR inInstanceName) 

    HQUERY hQuery = NULL; 
    PDH_STATUS pdhStatus = PdhOpenQuery (0, 0, &hQuery); 
    HCOUNTER hCounter = NULL; 
    TCHAR szPathBuffer[MAX_PATH]; 
    _stprintf_s(szPathBuffer,_T("\\Process(%s)\\%Processor Time"),inInstanceName);     pdhStatus = PdhAddCounter(hQuery, szPathBuffer, 0, &hCounter);
    
    pdhStatus = PdhCollectQueryData(hQuery); 
    Sleep(1000); 
    pdhStatus = PdhCollectQueryData(hQuery);     DWORD ctrType; 
    PDH_FMT_COUNTERVALUE fmtValue; 
    pdhStatus = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, &ctrType, &fmtValue); 
    pdhStatus = PdhCloseQuery (hQuery); 
    return fmtValue.longValue; 

到_stprintf_s(szPathBuffer,_T("\\Process(%s)\\%Processor Time"),inInstanceName);  这行
就会跳到void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
    /* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
    (_Reserved);
    _debugger_hook_dummy = 0;
}谁知道问题出在哪里呢

解决方案 »

  1.   

    _stprintf_s似乎少了一个参数。第二个参数为szPathBuffer的大小
      

  2.   

    _stprintf_s(szPathBuffer,_T("\\Process(%s)\\%Processor Time"),inInstanceName); 
    问题出在第二个%上,它是格式字符,而%P又是不存在的格式,你的参数列表中只有inInstanceName一个参数,应该把第二个%去掉。
      

  3.   


    但是算CPU的使用率的 格式就是\\Process(%s)\\%Processor Time   %是必须要有的..要不得不到CPU使用率
      

  4.   

    应该是用2个%吧  \\Process(%s)\\%%Processor Time