子线程如何主线程发消息?

soraking 2011-08-21 12:19:00
在窗口类中用CreateThread创建了一个子线程,子线程将工作结果发消息给主线程。如何得到主线程的hWnd? LVOID param 已经传了this主线程指针。难道不传主线程的指针,而是传窗口类的句柄?
...全文
391 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixiang1983 2011-08-22
  • 打赏
  • 举报
回复
创建线程是传参数或使用全局变量
一叶之舟 2011-08-22
  • 打赏
  • 举报
回复
这是接口设计的问题,一两句也不好说清楚。
至善者善之敌 2011-08-21
  • 打赏
  • 举报
回复
传句柄也可以转换为指针。。。
辰岡墨竹 2011-08-21
  • 打赏
  • 举报
回复
PostThreadMessage(),直接用线程ID
http://msdn.microsoft.com/en-us/library/ms644946(v=vs.85).aspx
主线程有消息循环,你只要自定义一个消息就可以了。
zyc_glboy 2011-08-21
  • 打赏
  • 举报
回复
如果只是使用窗口句柄的话,定义一个全局变量也可以的吧!反正所以的线程用的都是一样的句柄!
soraking 2011-08-21
  • 打赏
  • 举报
回复
我想应该是这样吧:
1.主线程创建子线程
CreateThread(略,略,略,this->hWnd,略..)
2.子线程
工作后产生两个变量long a,b
HWND hwnd=(HWND)lpParameter;//this->hWnd传过来的
::PostMessage(hwnd,WM_USER+100,a,b);
3.主线程接收消息处理

不知这样,是否可以?我这里没有测试环境.
soraking 2011-08-21
  • 打赏
  • 举报
回复
但是这样,主线程必须时刻检查结构内容是否有变动。因为子线程不是工作一次。我想,子线程工作完后,将数据发消息给主线程,主线程收到消息后,立即处理。
jernymy 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]
封装一个结构,把所有要共享的数据都放进结构里,他后传结构的指针给CreateTread
[/Quote]

这样就很好了
soraking 2011-08-21
  • 打赏
  • 举报
回复
1.刚才试了一下传主线程的this指针进去(在CreateThread中)
2.在子线程中 //udp是主线程类
udp *self=(udp *)lpParameter; //lpParameter就是传进来的this
self->GetSafeHwnd? //无法获得主线程的句柄,如何获取?,但可以访问主线程的公用函数
jackyjkchen 2011-08-21
  • 打赏
  • 举报
回复
封装一个结构,把所有要共享的数据都放进结构里,他后传结构的指针给CreateTread
qq120848369 2011-08-21
  • 打赏
  • 举报
回复
创建线程时候把句柄当参数传进去.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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