小弟在写一个多线程的程序,当主线程给用户界面线程发送结束线程的消息后,单步调试程序,发现程序并未进入用户界面线程的消息响应函数,我想知道如何查看用户界面线程是否已经收到消息了。
另外注,我的用户界面线程其实没有用户界面,只是CGameThread继承了CWinThread,然后用AfxBeginThread(RUNTIME_CLASS(CGameThread),...)创建的线程,消息循环已经建立,因为主线程先前已经给用户界面线程发过消息,能响应。但最后主线程发送的结束线程的消息,用户界面线程却响应不了,不知道如何下手去解决这个问题,请各位有这方面经验的兄弟姐妹指点一下。
先谢谢了。

解决方案 »

  1.   

    直接用PostMessage给界面发送消息
      

  2.   

    可以让主线程发送完消息sleep下试试
      

  3.   

    PostMessage只是把消息放入目标线程的消息队列,假如函数返回值正确只是说明成功把消息放入目标线程的消息队列中,至于目标线程没有正确响应该消息可能是由于别的原因导致目标线程没有正确处理该消息了,你可以换成SendMessage来发送消息,SendMessage是必须等待目标线程处理消息完后才返回,可以根据返回值来判断目标线程消息处理函数的返回值是否正确;如果想判断目标线程是否有运行该消息的处理函数,可以直接在消息处理函数中返回一个测试值,检查SendMessage的返回值是不是该测试值,由此来判断目标线程是否正确处理该函数了
      

  4.   

    PostMessage只是把消息放入目标线程的消息队列,假如函数返回值正确只是说明成功把消息放入目标线程的消息队列中,至于目标线程没有正确响应该消息可能是由于别的原因导致目标线程没有正确处理该消息了,你可以换成SendMessage来发送消息,SendMessage是必须等待目标线程处理消息完后才返回,可以根据返回值来判断目标线程消息处理函数的返回值是否正确;如果想判断目标线程是否有运行该消息的处理函数,可以直接在消息处理函数中返回一个测试值,检查SendMessage的返回值是不是该测试值,由此来判断目标线程是否正确处理该函数了
      

  5.   

    PostMessage只是放入消息队列,可以用SendMessage,这是同步处理,会调用消息处理函数才返回,看能否成功执行
      

  6.   

    to 各位朋友,我是在主线程的某个函数中调用PostThreadMessage这个函数来给用户界面线程传递消息的。
    因为听说PostMessage主要用于线程内部传递消息,所以就用了PostThreadMessage,怪我没表述清楚。
      

  7.   

    因为听说PostMessage主要用于线程内部传递消息,所以就用了PostThreadMessage
    没有这区别
      

  8.   

    PostMessageThe PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and returns without waiting for the thread to process the message. 
    可见PostMessage不一定和本线程关联(HWND hWnd)NULL The function behaves like a call to PostThreadMessage with the dwThreadId parameter set to the identifier of the current thread. postmessage当第一个参数为null是,使用PostThreadMessage发送给本线程
      

  9.   

    我昨天回去用了SendMessage,结果编译就没通过,原因是SendMessage第一个参数要求是个窗口句柄,我那个接受消息的线程CGameThread是没有窗口的,只有消息循环啊。
      

  10.   

    在调用postmessage函数那里设个断点看看
      

  11.   

    我没用PostMessge,用的是PostThreadMessage,在调用这个函数的地方设置断点了,函数运行后返回值是1.
    可就是进不了消息处理函数,这几天都在想这个问题啊。