首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

一个多线程发送消息的有关问题,

2012-02-07 
一个多线程发送消息的问题,急!!!!!!!!主线程中新建两个用户子线程,但在主线程中给子线程发送消息,只有一个

一个多线程发送消息的问题,急!!!!!!!!
主线程中新建两个用户子线程,但在主线程中给子线程发送消息,只有一个子线程窗口能接收到消息,而另一个子线程窗口接收不到消息。并且总是那个先创建的子线程能接收到消息。

主线程中的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消息

热点排行