如何在线程间传递对话框句柄???

Cikar_no1 2012-07-14 11:41:41
我新执行了一个线程,CThreadA, 该线程用来生成一个非模态对话框DlgA,如pDlg->Creat(……);……

现在问题是,这个对话框的句柄hWnd=pDlg->m_hWnd;怎么被保存并传递给主线程里面?

hWnd现在声明为该线程的成员变量,我在主线程中调用它
CThreadA m_Th;

m_Th.hWnd这个命令调用不成功! 如果不是在线程中生成非模态对话框DlgA,那么就能成功调用该句柄!

求高手指点下是不是线程间对句柄通信有问题?

...全文
230 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2012-07-15
  • 打赏
  • 举报
回复
线程不是有启动参数么?除了用来传输入参数之外,也可以传输出参数的。把这些参数放在一个结构里然后传地址到线程。
当然你要做线程同步,以避免这个参数结构在线程没有读取输入参数或者设置完输出参数的时候就被析构掉了
Eleven 2012-07-15
  • 打赏
  • 举报
回复
你创建线程的时候将主线程UI的窗口句柄HWND传递给线程函数,在线程函数中创建完非模态对话框以后发送一个自定义的消息到UI,把非模态对话框的HWND窗口句柄作为消息的参数即可。
mmcanyu 2012-07-15
  • 打赏
  • 举报
回复
lz是在一个线程类里面里面创建了一个非摸态对话框,然后想把这个非模态对话框句柄返回给主线程。

可能是线程函数还没创建完对话框,主线程就去读m_Th.hWnd。应该线程创建完窗口再发消息通知主线程。

如果你用的是CWinThread, 最好在线程里面把对话框指针赋给m_pMainWnd = pDlg;
m_pMainWnd = pDlg; //m_pMainWnd关闭时,自动退出本线程

15,471

社区成员

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

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