Whats the difference between while loop in Windows message loop and while(1)


U

Uday Bidkar

I am trying to register my interface with IConnectionPoint of outlook
reminders to capture some Outlook Reminder events and having some
issues. Here goes the pseudo code

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
//Register class CMyEventHandler : public IDispatch with
IConnectionPoint of Outlook reminder

//Removed Wizard generated code for registering the widow class and
initializing the window

// And Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

If this is the code I do get control back in CMyEventHandler::Invoke()
when some Reminder event occurs as a notification from outlook.

But if I replace the message loop with while(1){} I dont get any such
notifications, instead outlook hangs.

Looking at the Main message loop, it seems that its also a infinite
loop unless GetMessge() returns Zero for WM_QUIT. What I want to know
is why i dont get notified by Outlook if there is actual infinite loop
instead of message loop? What make message loop different than
while(1){} ?

Thanks in advance
 
Ad

Advertisements

S

Salt_Peter

Uday said:
I am trying to register my interface with IConnectionPoint of outlook
reminders to capture some Outlook Reminder events and having some
issues. Here goes the pseudo code

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
//Register class CMyEventHandler : public IDispatch with
IConnectionPoint of Outlook reminder

//Removed Wizard generated code for registering the widow class and
initializing the window

// And Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

If this is the code I do get control back in CMyEventHandler::Invoke()
when some Reminder event occurs as a notification from outlook.

But if I replace the message loop with while(1){} I dont get any such
notifications, instead outlook hangs.

Looking at the Main message loop, it seems that its also a infinite
loop unless GetMessge() returns Zero for WM_QUIT. What I want to know
is why i dont get notified by Outlook if there is actual infinite loop
instead of message loop? What make message loop different than
while(1){} ?

Thanks in advance

None of the above is C++. Please post your question in a relevent
newsgroup that deals with that particular operating system.
[5.9] Which newsgroup should I post my questions?
http://www.parashift.com/c++-faq-lite/how-to-post.html
 
?

=?ISO-8859-15?Q?Juli=E1n?= Albo

Uday said:
while (GetMessage(&msg, NULL, 0, 0))
But if I replace the message loop with while(1){} I dont get any such
notifications, instead outlook hangs.
Looking at the Main message loop, it seems that its also a infinite
loop unless GetMessge() returns Zero for WM_QUIT. What I want to know
is why i dont get notified by Outlook if there is actual infinite loop
instead of message loop? What make message loop different than
while(1){} ?

The main difference is that '1' is not the same as 'GetMessage (....)'.
Thinking a bit, the name 'GetMessage' suggests that it gets a message, so
the difference is that with 'while (1)' you never get a message. The next
logical step is to read something about Windows messages.
 
U

Uday Bidkar

Thanks Julián for responding.

The documentation for GetMessage say that if the function retrieves a
message other than WM_QUIT, the return value is nonzero and if the
function retrieves the WM_QUIT message, the return value is zero. This
means that while (GetMessage(&msg, NULL, 0, 0)) is same as while(1)
unless WM_QUIT is the message retrieved from message queue so why the
difference in behavior?

I apologize for posting this in wrong newsgroup.
 
Ad

Advertisements

?

=?ISO-8859-15?Q?Juli=E1n?= Albo

Uday said:
The documentation for GetMessage say that if the function retrieves a
message other than WM_QUIT, the return value is nonzero and if the
function retrieves the WM_QUIT message, the return value is zero. This
means that while (GetMessage(&msg, NULL, 0, 0)) is same as while(1)
unless WM_QUIT is the message retrieved from message queue so why the
difference in behavior?

The difference is that '1' does nothing with 'msg'
but 'GetMessage(&msg, ...' does something with it. Read about Windows
messages in any article, book or help file about Windows programming.

If you come from some functional programming language, forget all about "no
secondary effects".
 

Top