Czasami aplikacja musi zbadać zawartość kolejki wiadomości wątku z poza Pętla wiadomości wątku. Na przykład jeśli procedura okno aplikacji wykonuje operację rysunku długich, może być użytkownikowi możliwość przerwania operacji. Jeżeli aplikacji okresowo bada kolejka komunikatów podczas operacji dla komunikatów myszy i klawiatury, nie odpowie na użytkownika do czasu po zakończeniu operacji. Powodem tego jest, że funkcja DispatchMessage w wątku wiadomości pętli zwraca dopóki nie zakończy procedurę okna przetwarzania wiadomości.
Funkcja PeekMessage do zbadania kolejka komunikatów podczas czasochłonnych operacji. PeekMessage jest podobna do funkcji GetMessage ; zarówno sprawdzić kolejkę wiadomości wiadomości, który spełnia kryteria filtru, a następnie skopiować wiadomości do struktury MSG . Zasadnicza różnica między dwie funkcje jest, że GetMessage nie zwraca aż do wiadomości spełniające kryteria filtru jest umieszczany w kolejce, zważywszy, że PeekMessage zwraca niezwłocznie niezależnie od tego, czy wiadomość jest w kolejce.
Poniższy przykład ilustruje sposób użycia PeekMessage do zbadania kolejka komunikatów myszą i klawiaturą podczas czasochłonnych operacji.
HWND hwnd;
BOOL fDone;
MSG msg;
/ / Rozpoczęcia operacji i kontynuować aż do jej zakończenia / / lub dopóki użytkownik klika myszą lub naciśnięcia klawisza.
fDone = F&ALSE;
podczas gdy (! fDone) {fDone = DoLengthyOperation(); / / zdefiniowanych przez aplikację funkcji / / Usuń komunikaty, które mogą znajdować się w kolejce. Jeśli / / kolejka zawiera jakiekolwiek myszy lub klawiatury / / wiadomości, zakończenia operacji.
podczas (PeekMessage (amp; msg, hwnd, 0, 0, PM_REMOVE)) {switch(msg.message) {Sprawa WM_LBUTTONDOWN: Sprawa WM_RBUTTONDOWN: Sprawa WM_KEYDOWN: / / / / wykonywać wszelkie wymagane czyszczenie.
/ / fDone = TRUE;
}
}
}
Inne funkcje, w tym GetQueueStatus i GetInputState, umożliwiają również zbadać zawartość kolejki komunikatów dla wątku. GetQueueStatus zwraca tablicę flagi, która wskazuje typy wiadomości w kolejce; używany jest najszybszym sposobem odkryć, czy kolejka zawiera komunikaty. GetInputState zwraca wartość TRUE, jeśli kolejka komunikatów myszy lub klawiatury. Obie te funkcje mogą służyć do określenia, czy kolejka zawiera wiadomości, które muszą zostać przetworzone.