工作线程里的消息循环中消息为什么不删除啊???

easthg 2004-11-22 04:07:00
const UINT WM_EVENT = WM_USER + 1;

//消息循环
DWORD WINAPI ThreadMessageProc(LPVOID lParam)
{
MSG Msg;
while(true)
{
PeekMessage( &Msg, NULL, 0, 0, PM_REMOVE);
switch( Msg.message )
{
case WM_EVENT:
MessageBox( NULL, "1", "1", 0);
break;
default:
::TranslateMessage(&Msg);
::DispatchMessage(&Msg);
break;
}
Sleep(100);
}
}


int main()
{
DWORD ThreadId;//创建的消息循环线程的线程号
CreateThread( NULL, 0, ThreadMessageProc, NULL, 0, &ThreadId);
PostThreadMessage( ThreadId, WM_EVENT, NULL, NULL );
//……
}
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazyeagle 2004-11-23
  • 打赏
  • 举报
回复
mark
yszmax 2004-11-23
  • 打赏
  • 举报
回复
mark
easthg 2004-11-23
  • 打赏
  • 举报
回复
自己up.
DentistryDoctor 2004-11-22
  • 打赏
  • 举报
回复
你这分明是UI线程嘛。建议用GetMessage,去掉Sleep,
case WM_EVENT:
MessageBox( NULL, "1", "1", 0);
break;
=>
case WM_EVENT:
::TranslateMessage(&Msg);
MessageBox( NULL, "1", "1", 0);
break;
beyondtkl 2004-11-22
  • 打赏
  • 举报
回复
是哦 加了PM_REMOVE 会立马删除的
danyueer 2004-11-22
  • 打赏
  • 举报
回复
检查一下PeekMessage是不是发生了错误。
easthg 2004-11-22
  • 打赏
  • 举报
回复
To->krfstudio()
用上面的代码实际的调试一下。
krfstudio 2004-11-22
  • 打赏
  • 举报
回复
谁告诉你 PeekMessage( &Msg, NULL, 0, 0, PM_REMOVE); 不删除消息的?

加了 PM_REMOVE 参数后就删除消息了,此时和 GetMessage 的不同在于是消息队列为空时 GetMessage 不会马上返回,而 PeekMessage 会立即返回。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧