//问题实在是简单,但我不知道如何解决。小弟我实在汗颜
//在voiceDlg.h中
#define WM_DATARSEND WM_USER+104////在voiceDlg.cpp中
void CVoiceDlg::On_MM_WIM_DATA(HWAVEIN hInputDev, LPWAVEHDR lpWaveHdr)
{
::PostMessage(GetSafeHwnd(),WM_DATARSEND,0,0);//发出消息
}//线程
UINT uncompressThread(LPVOID lparam)
{
while(1) 
  {
::GetMessage(&msg, NULL, 0, 0);//我在这设了断点,怎么这里不能取得消息的?  switch(UINT(&msg))

case WM_DATARECVED: 
::MessageBox((HWND)lparam,"服务器线程recvThread","Thread Proc2",MB_OK);
}
   }
}
//大家帮忙看看有什么问题

解决方案 »

  1.   

    ::PostMessage(GetSafeHwnd(),WM_DATARSEND,0,0);//发出消息这样发送了是不是只有对话框才能收到啊?你试试
      

  2.   

    辅助线程和主线程通信可以使用消息,但主线程和辅助线程通信就不行,因为辅助线程没有消息循环,这时候有两种方法,一种是使用全局变量,一种是使用事件(event),你看着办吧,我觉得使用Event好
      

  3.   

    主线程中使用SetEvent(),辅助线程使用WaitForSingleObject()就可以达到通信的目的,我想不需要再说了吧,你可以去查查是怎么用的
      

  4.   

    要简单就用全局变量吧!哈哈定义一个,假如是BOOL m_bOk;
    开始是FALSE;等你认为要让辅助线程执行了就设置为TRUE;
    辅助线程中就判断是TRUE才执行,懂了吗?不过循环判断的话怕当机哦
      

  5.   

    啊~~~~快点讲讲嘛~
    另:刚才我看到一个PostThreadMessage
    是否可行?正在实验中……
      

  6.   

    CEvent的方法:
    定义全局变量:CEvent g_eventStart;
    在你要发送那个消息的地方换成g_eventStart.SetEvent();在辅助线程里面用::WaitForSingleObject(g_eventStart, INFINITE);
    它会无限期的等到你的g_eventStart.SetEvent();执行以后才执行后面的;就这样,解决了吗?去试试!成功后给我分,呵呵
      

  7.   

    但不要这样调用
    while(1) 
      {
    ::GetMessage(&msg, NULL, 0, 0);//我在这设了断点,怎么这里不能取得消息的?  switch(UINT(&msg))

    case WM_DATARECVED: 
    ::MessageBox((HWND)lparam,"服务器线程recvThread","Thread Proc2",MB_OK);
    }
       }
    为了一条消息这样不只得,因为很有可能会当机
      

  8.   

    PostThreadMessage还需要获取线程id,也是一种方法,你试试另:使用CEvent,需要包含afxmt.h
      

  9.   

    在论坛上翻了一夜,
    关于这个的帖子n多,
    发现我这个问题还真是不那么简单,具有普遍性
    好多大虾都还没给出个结论

    我比较喜欢用消息的方法,
    所以试了PostThreadMessage
            SendMessage
            PostMessage和GetMessage
      peekMessage结果线程它就是没响应,
    真是没办法
    真的就不能用消息了么??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????