一个多线程发送消息的问题,急!!!!!!!!
主线程中新建两个用户子线程,但在主线程中给子线程发送消息,只有一个子线程窗口能接收到消息,而另一个子线程窗口接收不到消息。并且总是那个先创建的子线程能接收到消息。
主线程中的InitInstance()函数如下:
BOOL CThreadMain::InitInstance()
{
m_pDlgMain = new CDlgMain; //m_pDlgMain是主线程的窗口指针
m_pDlgMain-> Create(CDlgMain::IDD);
m_pDlgMain-> ShowWindow(SW_SHOW);
m_pThreadShow = (CThreadShow *)AfxBeginThread( RUNTIME_CLASS(CThreadShow) ); //显示子线程
m_pThreadApply = (CThreadApply *)AfxBeginThread( RUNTIME_CLASS(CThreadApply) ); //请求子线程
m_hThreadApply = m_pThreadApply-> m_pMainWnd-> m_hWnd; //显示窗口句柄
m_hThreadShow = m_pThreadShow-> m_pMainWnd-> m_hWnd; //请求窗口句柄
msghwnd *pmsg1=(msghwnd *)malloc(sizeof(msghwnd));
pmsg1-> nTime=0;
pmsg1-> m_hWnd=m_pDlgMain-> m_hWnd;
::PostMessage(m_hThreadApply,WM_SENDHWNDMAIN,0,(LPARAM)pmsg1);//接收不到消息
::PostMessage(m_hThreadShow,WM_OPERATESUC,0,0); //能接收到消息
return TRUE;
}
如果上面的:
m_pThreadShow = (CThreadShow *)AfxBeginThread( RUNTIME_CLASS(CThreadShow) ); //显示子线程
m_pThreadApply = (CThreadApply *)AfxBeginThread( RUNTIME_CLASS(CThreadApply) ); //请求子线程
改为:
m_pThreadApply = (CThreadApply *)AfxBeginThread( RUNTIME_CLASS(CThreadApply) ); //请求子线程
m_pThreadShow = (CThreadShow *)AfxBeginThread( RUNTIME_CLASS(CThreadShow) ); //显示子线程
则请求子线程能接收到消息,而显示子线程接收不到消息;
谢谢了!!!!!!!!!
[解决办法]
搞不懂了...只能再给你几种尝试的方法:
1. 检查PostMessage的返回值
2. 把PostMessage改成SendMessage
3. 重载子线程的PretranslateMessage, 在里面检查有没有收到你的消息
4. 设置两个通知,等两个子线程中的对话框都初始化完了以后再Post消息