Waiting in a Message Loop

The following code fragment illustrates the use of the MsgWaitForMultipleObjects function in a message loop.

int MessageLoop (

HANDLE* lphObjects, // handles that need to be waited on

int cObjects // number of handles to wait on

)

{

// The message loop lasts until we get a WM_QUIT message,

// upon which we shall return from the function.

while (TRUE)

{

// block-local variable

DWORD result ;

// Wait for any message sent or posted to this queue

// or for one of the passed handles be set to signaled.

result = MsgWaitForMultipleObjects(cObjects, lphObjects,

FALSE, INFINITE, QS_ALLINPUT);

// The result tells us the type of event we have.

if (result == (WAIT_OBJECT_0 + cObjects))

{

// block-local variable

MSG msg ;

// Read all of the messages in this next loop,

// removing each message as we read it.

while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {

// If it's a quit message, we're out of here.

if (msg.message == WM_QUIT)

return 1;

// Otherwise, dispatch the message.

DispatchMessage(&msg);

} // End of PeekMessage while loop.

}

else {

// One of the handles became signaled.

DoStuff (result - WAIT_OBJECT_0) ;

} // End of else clause.

} // End of the always while loop.

} // End of function.

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database