关于UI 线程的奇怪问题,请高手指教

彼得 2003-03-12 08:07:30
从CWinThread派生一个UI线程,然后从主线程中调用AfxBeginThread启动线程,可是从主线程向该线程postthreadmessage,该线程只能收到第一个自定义消息,其余的都收不到,可是posethreadmessage返回值提示发送成功,那位高手碰到或知道这种情况,请指教
...全文
56 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
彼得 2003-03-14
  • 打赏
  • 举报
回复
我试着建立了一个基于对话框的工程,使用了CWinThread的派生类,结果很好用,没有任何问题。

对于这个工程,我不知道为什么这样。我大概追踪了一下,感觉是CWinThread里有一个窗口的变量,这个变量和整个APP的主窗口有关,可能利用了主窗口的消息队列。对于对话框,窗口关系不复杂,就很容易成功,而对于实际的大工程,有很多的上层窗口,关系错综复杂,就导致消息不能正确分发。于是我猜想CWinThread主要是用于给CWinApp继承用的,但用作单独的线程,可能还有不周全的地方。

最后,我没有用这个从CWinThread派生的线程类,而是自己用CreateThread生成线程,然后在线程函数用PeekMessage生成消息队列,然后取消息,处理,呵呵,完成了。
彼得 2003-03-13
  • 打赏
  • 举报
回复
up
彼得 2003-03-13
  • 打赏
  • 举报
回复
up
yongdu 2003-03-13
  • 打赏
  • 举报
回复
posethreadmessage最要用
要用while(!posethreadmessage(..)) sleep(..)
即然posethreadmessage成功,那就说明posethreadmessage已成功发送, 不是此处问题

你的线程能即然收到第一个消息,说明消息队列是正确的,怀疑你的线程中止或是死掉了,已不能到达getmessage之类的消息函数了。
winay_dd 2003-03-13
  • 打赏
  • 举报
回复
能收到第一个自定义消息,说明主线程建立的消息队列。看看msdn。里面有解释的。

foxustc 2003-03-12
  • 打赏
  • 举报
回复
up

15,471

社区成员

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

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