Tworzenie zapytania
Aby utworzyć nowe zapytanie, które zbiera dane wydajności z pliku źródłowego lub dziennika w czasie rzeczywistym, wywołaj funkcję PdhOpenQuery. Funkcja zwraca dojście do zapytania używanego w kolejnych wywołaniach funkcji PDH.
Po utworzeniu zapytania wywołaj funkcję PdhAddCounter dla każdego licznika, który chcesz dodać do zapytania. Możesz użyć jednej z następujących metod, aby podać w pełni kwalifikowaną ścieżkę licznika.
- Zdefiniuj ścieżkę licznika jako ciąg statyczny. Użyj tej metody, jeśli zawsze monitorujesz ten sam licznik, a jeśli znasz poprawną składnię ścieżki licznika. Aby uzyskać informacje na temat poprawnej składni używanej do określania licznika, zobacz Określanie ścieżki licznika.
- Zainicjuj strukturę PDH_COUNTER_PATH_ELEMENTS z nazwami komputera, obiektu, licznika i wystąpienia. Przekaż tę strukturę do PdhMakeCounterPath, aby uzyskać ścieżkę licznika dla określonych elementów.
- Określ ścieżkę licznika zawierającą symbole wieloznaczne i wywołaj PdhExpandWildCardPath, aby uzyskać listę nazw liczników pasujących do symboli wieloznacznych w ścieżce. Przeskanuj listę nazw liczników i dodaj do zapytania liczniki, które mają być na tej liście.
- Wywołaj funkcję PdhBrowseCounters, aby wyświetlić okno dialogowe umożliwiające użytkownikowi przeglądanie i wybieranie liczników wydajności. Aby uzyskać więcej informacji, zobacz Liczniki przeglądania.
Należy pamiętać, że jeśli określono wystąpienie licznika, które nie istnieje, pdhAddCounter nie zgłasza warunku błędu. Zamiast tego zwraca ERROR_SUCCESS. Przyczyna tego zachowania polega na tym, że nie wiadomo, czy wskazano nieistniejące wystąpienie licznika, czy takie, które będzie istnieć, ale jeszcze nie zostało utworzone.
Brakujące wystąpienie licznika zostanie zgłoszone przez PdhCollectQueryData, PdhGetRawCounterValuelub PdhGetFormattedCounterValue. Podczas wywoływania PdhCollectQueryData tylko dla jednego wystąpienia licznika i gdy wystąpienie to nadal nie istnieje, zakłada się, że nadal nie będzie istniało, a funkcja zwraca PDH_NO_DATA. Jeśli jednak zostanie zapytany więcej niż jeden licznik, pdhCollectQueryData może nadal zwracać ERROR_SUCCESS nawet jeśli jedno z wystąpień licznika jeszcze nie istnieje. W takim przypadku wywołaj PdhGetRawCounterValue lub PdhGetFormattedCounterValue dla każdego z interesujących wystąpień licznika. Jeśli wystąpienie nie istnieje podczas wywoływania PdhGetRawCounterValue, funkcja zwraca ERROR_SUCCESS i ustawia element członkowski CStatus PDH_RAW_COUNTER PDH_STATUS_NO_INSTANCE. Jeśli wystąpienie nie istnieje podczas wywoływania PdhGetFormattedCounterValue, funkcja zwraca PDH_INVALID_DATA i ustawia członka CStatus struktury PDH_FMT_COUNTERVALUE na PDH_CSTATUS_NO_INSTANCE.
Należy pamiętać, że ścieżka licznika określona w funkcji PdhAddCounter musi być zlokalizowana. Funkcja PdhAddEnglishCounter zapewnia neutralny dla ustawień regionalnych sposób dodawania liczników wydajności do zapytania. Ta funkcja jest zalecanym sposobem dodawania liczników neutralnych dla ustawień regionalnych do zapytania.
Aby usunąć licznik z zapytania, wywołaj funkcję PdhRemoveCounter.
Po zakończeniu zbierania danych dla zapytania wywołaj funkcję PdhCloseQuery, aby zamknąć zapytanie i zwolnić wszystkie przydzielone zasoby systemowe. pdhCloseQuery zamyka wszystkie dojścia licznika skojarzone z zapytaniem.