Поделиться через


Создание запроса

Чтобы создать новый запрос, который собирает данные о производительности из файла источника или журнала в реальном времени, вызовите функцию PdhOpenQuery. Функция возвращает дескриптор запроса, который используется в последующих вызовах функции PDH.

После создания запроса вызовите функцию PdhAddCounter для каждого счетчика, который требуется добавить в запрос. Для предоставления полностью квалифицированного пути счетчика можно использовать один из следующих методов.

  • Определите путь счетчика как статическую строку. Используйте этот метод, если всегда отслеживать один и тот же счетчик, и если вы знакомы с правильным синтаксисом пути счетчика. Сведения о правильном синтаксисе, используемом для указания счетчика, см. в разделе Указание пути счетчика.
  • Инициализировать структуру PDH_COUNTER_PATH_ELEMENTS, содержащую имена компьютера, объекта, счетчика и экземпляра. Передайте эту структуру в PdhMakeCounterPath, которая вернет путь счетчика для указанных элементов.
  • Укажите путь счетчика, содержащий подстановочные знаки, и вызовите PdhExpandWildCardPath, чтобы узнать список имен счетчиков, которые соответствуют подставленным знакам в пути. Просмотрите список имен счетчиков и добавьте в запрос нужные счетчики.
  • Вызовите функциюpdhBrowseCounters, чтобы отобразить диалоговое окно, позволяющее пользователю просматривать и выбирать счетчики производительности. Дополнительные сведения см. в счетчиках просмотра.

Обратите внимание, что если указан экземпляр счетчика, которого не существует, PdhAddCounter не сообщает об ошибке. Вместо этого он возвращает ERROR_SUCCESS. Причина этого поведения заключается в том, что неизвестно, был ли указан несуществующий экземпляр счетчика или экземпляр, который будет существовать, но еще не создан.

Отсутствующий экземпляр счетчика будет сообщён либо PdhCollectQueryData, либо PdhGetRawCounterValue, или PdhGetFormattedCounterValue. При вызове PdhCollectQueryData только для одного экземпляра счетчика, и экземпляр счетчика по-прежнему не существует, предполагается, что экземпляр счетчика не будет существовать, а функция возвращает PDH_NO_DATA. Однако если запрашивается несколько счетчиков, PdhCollectQueryData по-прежнему может возвращать ERROR_SUCCESS даже если один из экземпляров счетчика еще не существует. В этом случае вызовите PdhGetRawCounterValue или PdhGetFormattedCounterValue для каждого экземпляра счётчика, представляющего интерес. Если экземпляр не существует при вызове PdhGetRawCounterValue, функция возвращает ERROR_SUCCESS и задает элемент CStatusPDH_RAW_COUNTER значение PDH_STATUS_NO_INSTANCE. Если экземпляр не существует при вызове PdhGetFormattedCounterValue, функция возвращает PDH_INVALID_DATA и устанавливает член CStatus структуры PDH_FMT_COUNTERVALUE в PDH_CSTATUS_NO_INSTANCE.

Обратите внимание, что путь счетчика, указанный в функции PdhAddCounter, должен быть локализован. Функция PdhAddEnglishCounter предоставляет способ, не зависящий от локали, для добавления счетчиков производительности в запрос. Эта функция рекомендуется для добавления в запрос счетчиков, независимых от языкового стандарта.

Чтобы удалить счетчик из запроса, вызовите функцию PdhRemoveCounter.

После завершения сбора данных для запроса вызовите функцию PdhCloseQuery, чтобы закрыть запрос и освободить все выделенные системные ресурсы. PdhCloseQuery закрывает все дескрипторы счетчиков, связанные с запросом.