PeekMessage参数替PM_NOREMOVE取不自己发送的消息

PeekMessage参数为PM_NOREMOVE取不自己发送的消息?
新手刚学多线程,遇到如下问题:
在线程中更新控件数据,单击按钮发送 PostThreadMessage(WM_QUIT)
单在如下的线程中一直收不到消息。但PeekMessage参数改为PM_REMOVE后就可以收到.
什么原因呢?


while(1){
if (PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if (msg.message == WM_QUIT)
{
AfxMessageBox(TEXT("收到QUIT消息"));
break;
}
}
else
{
if (progress*100 > 100.0)
{
break;
}
progress = byteReceived/fileSize;
byteReceived += 2; 
texProgress.Format(TEXT("%.1f"),progress*100);
dlg->m_listCtrl.SetItemText(iTem,1,texProgress);
}
}

------解决方案--------------------
貌似你如果不remove,你就只能不停地得到它。

------解决方案--------------------
引用:
貌似你如果不remove,你就只能不停地得到它。




引用:
新手刚学多线程,遇到如下问题:
在线程中更新控件数据,单击按钮发送 PostThreadMessage(WM_QUIT)
单在如下的线程中一直收不到消息。但PeekMessage参数改为PM_REMOVE后就可以收到.
什么原因呢?


while(1){
if (PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if (msg.message == WM_QUIT)
{
AfxMessageBox(TEXT("收到QUIT消息"));
break;
}
}
else
{
if (progress*100 > 100.0)
{
break;
}
progress = byteReceived/fileSize;
byteReceived += 2; 
texProgress.Format(TEXT("%.1f"),progress*100);
dlg->m_listCtrl.SetItemText(iTem,1,texProgress);
}
}


++

必须从队列中删除,


该函数,需要特殊处理wm_quit 和wm_paint 。比如你的程序 随意处理wm_paitn.会造成

wm_paint一直存在。