对你文中的"同时也保证了线程不会因为GetMessage而进入休眠状态"不是很理解,能给指导一下吗,谢谢.
@不是很理解
因为GetMessage是一个具有线程同步特性的方法,如果它没有从消息队列中获得消息,它就不会返回,一直处于等待状态,那么GetMessage所在的线程也就进入休眠状态了。一般的应用程序还是使用PeekMessage去取消息,因为它是一个异步的方法,不管是否取得消息,它都会返回的,这样就避免了线程进入休眠状态,但是要防止出现死循环。
@不是很理解
通过bIdle这个布尔型变量啊,我在文中有讲到的。
好的;那你分析一下,下面的代码能达到相同的功能嘛?顺便问一下IsIdleMessage(&m_msgCur)的含义是什么啊???
bool idle=true;
long count=0;
for(;;)
{
if(::peekMessage(&msgCur,NULL,0,0,PM_NOME))
{
if(!GetMessage(&msgCur,NULL,0,0))
return msgCur.wParam;
if(!PreTranslateMessage(&msgCur))
{
::TranslateMessage(&msgCur);
::DispatchMessage(&msgCur);
}
idle=true;
count=0;
}
else if(idle)
{
if(OnIdle(count++)
idle=false;
}
else
{
::WaitMessage();
}
}
@不是很理解
不好意思,已经两年多没有看MFC了,没有办法回答你的第一个问题。至于第二个问题,你可以查阅MSDN。