Nie bardzo jeszcze rozumiem określenia np, "odświeżenie kolejki komunikatów "
Każda aplikacja okienkowa posiada kolejkę komunikatów
*), do której spływają komunikaty zgłaszane przez system lub kontrolki. Komunikaty na bierząco odbierane są w tak zwanej pętli komunikatów, która w wersji podstawowej składa się z wywołań trzech funkcji:
GetMessage,
TranslateMessage i
DispatchMessage. Pierwsza funkcja pobiera komunikat z kolejki, ostatnia - przekazuje komunikat do właściwego okna, do właściwej procedury obsługi, czyli np.
OnClick,
OnTimer itp. Stąd prosty wiosek, że twój kod wykonuje się w trakcie obsługi jakiegoś komunikatu, zatem nie ma możliwości, żeby w tym samym czasie były odbierane inne komunikaty (
Sleep usypia cały proces, czyli także pętle komunikatów).
ProcessMessages pozwala na obsłużenie zalegających komunikatów z poziomu obsługi innego komunikatu, dzięki czemu da się zniwelować niekorzystny efekt blokowania aplikacji. Choć nie zawsze to działa, czasem trzeba użyć wątków.
*) prawdę mówiąc, to każdy proces i wątek z założenia posiada kolejkę komunikatów, niezależnie od tego, czy jest to aplikacja okienkowa czy nie. W sumie to jeden z mechanizmów komunikacji międzyprocesowej (IPC).