执行下面代码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;
}谁知道问题出在哪里呢
{
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;
}谁知道问题出在哪里呢
问题出在第二个%上,它是格式字符,而%P又是不存在的格式,你的参数列表中只有inInstanceName一个参数,应该把第二个%去掉。
但是算CPU的使用率的 格式就是\\Process(%s)\\%Processor Time %是必须要有的..要不得不到CPU使用率