[ros-dev] RE: [ros-diffs] [mbosma] 20543: fix typos.

Murphy, Ged (Bolton) MurphyG at cmpbatteries.co.uk
Tue Jan 3 15:22:12 CET 2006


Thomas Weidenmueller wrote

> Murphy, Ged (Bolton) wrote:
> > This should really be
> >  
> > while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
> >  
> > as GetMessage returns <0 on failure.
> > It will then break on failure or WM_QUIT
> >  
> >  Just being anal though as GetMessage should never really fail  ;)
> 
> See
> http://msdn.microsoft.com/library/default.asp?url=/library/en-
> us/winui/WinUI/WindowsUserInterface/Windowing/MessagesandMessa
> geQueues/MessagesandMessageQueuesReference/MessagesandMessageQ
> ueuesFunctions/GetMessage.asp
> 
> The loop shouldn't be broken if GetMessage returns -1.
> 
> - Thomas


True, I suppose it depends on the reasoning behind the GetMessage error.

MSDN does have this to say:

"Warning  
Because the return value can be nonzero, zero, or -1, avoid code like this:

while (GetMessage( lpMsg, hWnd, 0, 0)) ..."


For a bit of light hearted fun, here is the MSDN suggestion:

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}


which, IIRC (I don't have a compiler to hand) would throw up 'assignment in
expression' errors with our MSVC /w4 setting. We would therefore need
something like :


bRet = GetMessage( &msg, NULL, 0, 0 );
while( bRet != 0 )
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
    bRet = GetMessage( &msg, NULL, 0, 0 );
}

Which has suddenly become rather long for a normally simple message loop
routine ..... LOL
A nice case for a #pragma warning() ..... or reduce the warning level for
non core components (ping)

Ged




************************************************************************
The information contained in this message or any of its
attachments is confidential and is intended for the exclusive
use of the addressee. The information may also be legally
privileged. The views expressed may not be company policy,
but the personal views of the originator. If you are not the
addressee, any disclosure, reproduction, distribution or other
dissemination or use of this communication is strictly prohibited.
If you have received this message in error, please contact
postmaster at exideuk.co.uk 
<mailto:postmaster at exideuk.co.uk> and then delete this message. 

Exide Technologies is an industrial and transportation battery
producer and recycler with operations in 89 countries.
Further information can be found at www.exide.com




More information about the Ros-dev mailing list