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

  2. Uday Bidkar

    Salt_Peter Guest

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

  3. 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.
     
    =?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. 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".
     
    =?ISO-8859-15?Q?Juli=E1n?= Albo, Dec 12, 2006
    #5
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.