Message loop of message pump

De message loop of message pump is een klein stukje code dat in elk Windows programma bestaat dat een GUI heeft. De console applicatie heeft dus geen message pool.Een GUI applicatie werkt met berichten (messages). Wanneer bijvoorbeeld de muis wordt bewogen, verstuurd Windows een WM_MOUSEMOVE bericht naar het onderliggen window.

De Win32Message API ontvangt berichten van Windows. Elk programma spendeert 99,99% van zijn tijd daar, te wachten totdat Windows zegt dat er iets interessants is gebeurd.

Windows verstuurt de berichten naar de 'message queue' (berichten wachtrij) van de thread waar de window toe behoort. Er moet dus iets zijn dat deze berichten doorstuurt naar de juist window. Dit werk wordt gedaan door de message loop of message pump.

Elke Windows GUI framework heeft een message loop. De eenvoudigste message loop ziet er als volgt uit (in C++, gebruik interop om te schrijven in .NET)
MSG msg;
while(GetMessage(&msg, hwnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

TranslateMessage is een hulp functie die toetsenbord berichten vertaald. DispatchMessage() zorgt ervoor dat de window procedurs wordt aangeroepen met het bericht.

Gebruik PostThreadMessage om een bericht te versturen naar de message pool.

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren