怎样从一个线程里发消息给另一个线程

JeffHe 2000-04-11 06:29:00
加精
怎样从一个线程里发消息给另一个线程?
在主线程里创建了一个线程,现在要在这个分线程里发消息给主线程里的
Dialog,可是Dialog毫不响应:

UINT RunMyThread(LPVOID pParam)
{
int i=*(int *)pParam;
switch(i)
{
case 0://call host
updateList();
break;
case 1://start servers
break;
case 2://stop servers
break;
}

::SendMessage (((CMainFrame*)AfxGetApp()->m_pMainWnd)
->m_SetHostDlg.m_Dlg .m_hWnd ,WM_QUIT,0,0);

return 0;
}
...全文
739 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengdun 2000-04-12
  • 打赏
  • 举报
回复
如果是给主框架窗口发消息应该这么写,
::SendMessage (((CMainFrame*)AfxGetApp()->m_pMainWnd)
->GetSafeHwnd(),WM_QUIT,0,0);
如果是向主框架窗口创建的对话框发消息则应该将这个对话框定义为类的公有变量,并且要是指针,这样你就可以这样写:
::SendMessage (((CMainFrame*)AfxGetApp()->m_pMainWnd)
->m_pDlg->GetSafeHwnd(),WM_QUIT,0,0);
sintony 2000-04-11
  • 打赏
  • 举报
回复
(((CMainFrame*)AfxGetApp()->m_pMainWnd)
不一定能取得正确的ID
因为你是在一个独立的工作线程中

可以在调用线程时AfxGetApp()把作为LPVOID pParam,传进来这样SendMessage时就能得到正确的结果
longx 2000-04-11
  • 打赏
  • 举报
回复
另一个办法是申明一个全局的窗口句柄,在你的对话框初使化时将窗口句柄
赋给该变量,然后在线程中直接发给该窗口就可以了.
Lin 2000-04-11
  • 打赏
  • 举报
回复
1、发送消息到线程用PostThreadMessage,限制条件:接收线程必须有消息循环。
2、如果想关闭对话框,将消息WM_QUIT换为WM_CLOSE,WM_QUIT是用来退出消息循环的。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧