根据MSDN Library中的GetMessage API,当出现错误时,它可能会返回-1。该文件提供常见错误的代码段应被避免:将主消息循环中GetMessage()返回-1?
while (GetMessage(lpMsg, hWnd, 0, 0)) ...
文献说:
的返回-1的可能性值 意味着这样的代码可导致致命 应用错误。相反,使用代码 这样的:
BOOL bRet;
while((bRet = GetMessage(&msg, hWnd, 0, 0)) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
我的问题是,在每一个示例代码,包括Visual Studio创建的默认应用程序,从微软,主消息循环看起来如下:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
注意上面的GetMessage的第二个参数是NULL。如果上面的代码是有效的,这是否意味着GetMessage在这里不会返回-1,所以处理-1的返回值是不必要的?
+1非常好说! – 2011-03-13 09:13:38
我从来没有遇到麻烦,没有检查返回-1,但是当我看到文档时,我很困惑。 现在,我坚持什么文件说。而当GetMessage返回-1时ASSERT()。 – sam 2011-03-15 05:33:37
VS为默认应用程序生成的代码是正确的,因为它不会传递任何过滤器并提供有效的'MSG *'参数。如果您阅读['GetMessage'](http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms644936.aspx)的文档,则会明确指定这两种错误模式。再往下看它的位置*“避免这样的代码:”*它显示了一个带有'HWND'过滤器的例子。其他错误模式是可能的,但这些都是灾难性的,无论如何不能合理处理。或者如何从损坏的消息队列中恢复?在这一点上,它是游戏结束,2P UP。 – IInspectable 2013-08-07 19:19:59