主线程是一个CDialog1,子线程是一个CWinThread,CWinThread被调用后生成一个CDialog2,
在CDialog1中使用postmessge给CDialog2发送消息,dlg2接受到消息后是一个while(1)的循环,此时CDialog1为什么也挂了,不能操作了?
如果是PostThreadMessage发送消息给CWinThread,处理消息也是死循环,CDialog1却可以正常操作,这是为什么?高手帮忙解答啊~!

解决方案 »

  1.   

    PostMessage发消息应该不会死循环才对啊呀
      

  2.   

    本来就是这样的,DLG2的doModal()后,一定要处理完之后才能重新处理CwinThread.
    解决方法:如果2个界面有互操作的,就在另外一个线程中启动DLG2.这样就不会死了.如果2个界面互相取得句柄,那么就可以通信了
      

  3.   


    谢谢tiger9991的回复
    我是在CWinThread中启动的DLG2啊,CWinThread是另外的线程啊,为什么也有错误呢?
    http://download.csdn.net/source/2760249
      

  4.   

    很明显它会挂掉!
    你这句代码::PostMessage(m_dlg.GetSafeHwnd(),WM_MSG_HELLO,0,0);是能执行死循环,但是是在主线程里执行的!不信你可以跟踪下线程的ID,这样其实你那新的线程开与没开没什么区别
    正确的做法是pThread->PostThreadMessage(WM_MSG,NULL,NULL)
      

  5.   

    大哥你能不能在看看代码,m_dlg是被UIThread创建的,并不是主对话框的
      

  6.   

    这里的m_dlg是另一个线程中的对话框吗?
      

  7.   

    看了一下你的代码,不过我用的是VS2005,你的VC6下的代码过不了编译。
    发现一个问题,你发消息是向对话框发的,但是自定义消息的处理函数却不是写在对话框类中的,而是写在线程类中的。
      

  8.   

    死循环不一定是一直在执行,和while(1)可能有所不同,因为消息循环是阻塞式的.