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.

Смотрите мой ответ здесь.

Другие вопросы по тегам