PDH не может получить доступ к общему времени процессора через PdhAddCounter()
В настоящее время я пытаюсь сделать какой-то обзор использования процессора для моей программы DirectX, но кажется, что я не могу получить эту информацию через PdhAddCounter(). Мой код выглядит так:
status = PdhOpenQuery(NULL, 0, &m_queryHandle);
if(status != ERROR_SUCCESS)
{
m_canReadCpu = false;
}
status = PdhAddCounter(m_queryHandle, TEXT("\\Processor(_Total)\\% processor time"), 0, &m_counterHandle);
if(status != ERROR_SUCCESS)
{
m_canReadCpu = false;
}
После вызова PdhAddCounter мой статус = -1073738824, что вызывает сбой программы.
Я использую 64-битную систему Windows 7, я должен сделать что-то другое в 64-битной среде? Спасибо за любую помощь.
2 ответа
Помните: PdhAddCounter является разумным языковым стандартом.
Ответ -1073738824 означает PDH_CSTATUS_NO_OBJECT=0xC0000BB8. API не нашел эту строку. Вы используете неанглийскую ОС?
Если вам нужно создать приложение, совместимое с Windows XP, вам нужно использовать обходной путь, подобный следующему: http://en.verysource.com/code/3604946_1/platforminfo.cpp.html.
Для Vista и Windows 7, 8,... вместо этого вы можете использовать PdhAddEnglishCounter.
Вы также можете использовать API-интерфейс kernel32 GetSystemTimes, который освободит вас от зависимости от pdh.dll.
Смотрите мой ответ здесь.