//问题实在是简单,但我不知道如何解决。小弟我实在汗颜
//在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);
}
}
}
//大家帮忙看看有什么问题
//在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);
}
}
}
//大家帮忙看看有什么问题
开始是FALSE;等你认为要让辅助线程执行了就设置为TRUE;
辅助线程中就判断是TRUE才执行,懂了吗?不过循环判断的话怕当机哦
另:刚才我看到一个PostThreadMessage
是否可行?正在实验中……
定义全局变量:CEvent g_eventStart;
在你要发送那个消息的地方换成g_eventStart.SetEvent();在辅助线程里面用::WaitForSingleObject(g_eventStart, INFINITE);
它会无限期的等到你的g_eventStart.SetEvent();执行以后才执行后面的;就这样,解决了吗?去试试!成功后给我分,呵呵
while(1)
{
::GetMessage(&msg, NULL, 0, 0);//我在这设了断点,怎么这里不能取得消息的? switch(UINT(&msg))
{
case WM_DATARECVED:
::MessageBox((HWND)lparam,"服务器线程recvThread","Thread Proc2",MB_OK);
}
}
为了一条消息这样不只得,因为很有可能会当机
关于这个的帖子n多,
发现我这个问题还真是不那么简单,具有普遍性
好多大虾都还没给出个结论
,
我比较喜欢用消息的方法,
所以试了PostThreadMessage
SendMessage
PostMessage和GetMessage
peekMessage结果线程它就是没响应,
真是没办法
真的就不能用消息了么??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????