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


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

Чтобы создать запрос, который собирает данные о производительности из источника или файла журнала в реальном времени, вызовите функцию 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 и задает для элемента CStatusPDH_FMT_COUNTERVALUE значение PDH_CSTATUS_NO_INSTANCE.

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

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

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