在应用程序的窗口点击菜单时,程序好像停住了,主线程无法收到数据接收线程发送的数据消息:
pApp->PostThreadMessage(WM_DATA,pData,NULL);//pApp是主线程句柄,WM_DATA是消息名称,pData是数据;
放开菜单后,数据收发恢复正常。请教高手如何解决,谢谢!!!!

解决方案 »

  1.   

    PostThreadMessage是向线程发消息,不是向窗口发,线程消息是不会被窗口处理的,应该在CWinApp里处理。
    另外如果pData是一个缓冲区的指针的话,不能用Post方式发送消息,因为即使消息被接收到了,在处理的时候pData指向的内容可能已经改变了。最好的方法还是向窗口SendMessage,此时可以传递指针。
      

  2.   

    另外,如果主窗口进入了某个模式循环的话(弹出的菜单就是一个典型的模式循环),Post给线程的消息有可能会丢失,因为消息会被模式循环获取并丢弃。
      

  3.   

    JAMESHOOO 和DentistryDoctor 两位的回答都有道理,我的问题解决了,不再把消息发送到主控线程就行了。谢谢几位,这个分数应该怎么给呢?