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

Discussion in 'C++' started by Uday Bidkar, Dec 11, 2006.

  1. Uday Bidkar

    Uday Bidkar Guest

    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
    Uday Bidkar, Dec 11, 2006
    #1
    1. Advertising

  2. Uday Bidkar

    Salt_Peter Guest

    Uday Bidkar wrote:
    > 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
    Salt_Peter, Dec 11, 2006
    #2
    1. Advertising

  3. Uday Bidkar wrote:

    > 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.

    --
    Salu2
    =?ISO-8859-15?Q?Juli=E1n?= Albo, Dec 11, 2006
    #3
  4. Uday Bidkar

    Uday Bidkar Guest

    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.
    Uday Bidkar, Dec 12, 2006
    #4
  5. Uday Bidkar wrote:

    > 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".

    --
    Salu2
    =?ISO-8859-15?Q?Juli=E1n?= Albo, Dec 12, 2006
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Showjumper
    Replies:
    2
    Views:
    3,709
    Showjumper
    Jan 20, 2004
  2. jakk
    Replies:
    4
    Views:
    12,050
  3. exquisitus
    Replies:
    1
    Views:
    12,274
    Eric Sosman
    May 4, 2005
  4. Old Wolf
    Replies:
    3
    Views:
    320
    Ben Measures
    Apr 3, 2004
  5. gk
    Replies:
    0
    Views:
    908
Loading...

Share This Page