ansyncselect网络编程中,对话框程序,出现关闭对话框后,程序仍然在任务管理器的“进程”存在,而不在“应用程序”中存在。但把这一段注释掉,则不会出现这种问题。//接收及处理消息
while(Ret = GetMessage(&msg, NULL, 0, 0)!=0)
{
if (Ret == -1)
{
TRACE("GetMessage() failed with error %d\n", GetLastError());
::ExitThread(0);
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
或者改为
while(Ret=::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
也正常。ps:我就不知道这与PeekMessage,GetMessage有什么关系
while(Ret = GetMessage(&msg, NULL, 0, 0)!=0)
{
if (Ret == -1)
{
TRACE("GetMessage() failed with error %d\n", GetLastError());
::ExitThread(0);
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
或者改为
while(Ret=::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
也正常。ps:我就不知道这与PeekMessage,GetMessage有什么关系
while(Ret = GetMessage(&msg, NULL, 0, 0)!=0)
{
if (Ret == -1)
{
TRACE("GetMessage() failed with error %d\n", GetLastError());
::ExitThread(0);
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
PeekMessage与GetMessage ()的区别在于,当调用该函数而无消息时,且设置了PM_NOREMOVE标识,PeekMessage会立即返回一个空值,无设标识则会让步(交出控制权给其它准备好的程序)。而GetMessage ()不会,而是让程序休眠。
{
// if (Ret == -1)
if (WM_QUIT == msg.message)
{
TRACE("GetMessage() failed with error %d\n", GetLastError());
::ExitThread(0);
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}这个就可以了,为什么一定要去判断Ret呢?当程序退出时,发送WM_QUIT消息,这是GetMessage返回一个0,消息循环就结束