C++中主线程中创建了两个子线程,待其中一个子线程执行完毕在执行主线程,这个怎么实现呢

bluedreamTT 2013-10-06 04:42:21
如题:C++中主线程中创建了两个子线程,待其中一个子线程执行完毕在执行主线程,这个怎么实现呢,希望大神能给出方法,或者贴出简单的代码,感激不尽呢
...全文
1227 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruisai19830523 2015-04-30
  • 打赏
  • 举报
回复
楼主,问下你怎么解决了,能否给点代码我参考下,晕倒类似的问题。
bluedreamTT 2013-10-07
  • 打赏
  • 举报
回复
自己已解决~~谢谢给位
bluedreamTT 2013-10-07
  • 打赏
  • 举报
回复
我是初学者,直接用MFC的dialog做的,主线程只负责界面是什么意思呢?我这个就是触发btn按钮来实现采集等的
baichi4141 2013-10-07
  • 打赏
  • 举报
回复
引用 8 楼 bluedreamTT 的回复:
但放在一个线程里执行不会出错,但会出现界面卡死的现象,对了问一下怎么引用呢,或者我这么恢复你看不到吧
主线程只负责界面,开一个线程负责(采集+保存到缓存+保存到硬件)等等等等
bluedreamTT 2013-10-07
  • 打赏
  • 举报
回复
但放在一个线程里执行不会出错,但会出现界面卡死的现象,对了问一下怎么引用呢,或者我这么恢复你看不到吧
baichi4141 2013-10-07
  • 打赏
  • 举报
回复
引用 5 楼 bluedreamTT 的回复:
恩~~你指的是关键代码段吗?其实我做的是相机采集+保存,主线程中还有一个采集的多线程,其实是3个(采集+保存到缓存+保存到硬件),我已经用关键代码段让其中采集和保存到缓存两个子线程在实现线程同步,待保存缓存完毕后触发第三个保存到硬件的线程,或者不要第三个线程,直接将保存硬件放到主线程后面,不明白的就是如何让程序先执行前两个线程,待保存到缓存线程结束后在执行主线程后面的程序,或者触发第三个线程,而且采集界面不要卡死不响应,我现在做的是将保存硬件放到第三个线程,创建好之后挂起此线程,待上面结束后恢复保存硬件线程,这样做每次第一次执行程序是完全正确的,不关闭界面第二次采集时,到保存到硬件之前也是没错的,就是触发第三个线程时就出问题了。。老是出现基础类有问题什么的,我在考虑是我没closehandle的原因吗?但是我线程已经返回值了,就应该清除了吧。跪求大神给予指导,或者有什么更好的方法呢
有明确先后顺序的行为就放到一个线程里 如果各线程执行的主要任务有明确的先后顺序,那多线程还有什么用
baichi4141 2013-10-07
  • 打赏
  • 举报
回复
引用 2 楼 bluedreamTT 的回复:
这样界面会卡死,程序执行大概在20秒以上,所以至少要等待20s,界面就会被卡死
莫非你以为“主线程不执行”和“界面卡死”是两码事? 你要求的就是你想避免的,就这样
bluedreamTT 2013-10-07
  • 打赏
  • 举报
回复
恩~~你指的是关键代码段吗?其实我做的是相机采集+保存,主线程中还有一个采集的多线程,其实是3个(采集+保存到缓存+保存到硬件),我已经用关键代码段让其中采集和保存到缓存两个子线程在实现线程同步,待保存缓存完毕后触发第三个保存到硬件的线程,或者不要第三个线程,直接将保存硬件放到主线程后面,不明白的就是如何让程序先执行前两个线程,待保存到缓存线程结束后在执行主线程后面的程序,或者触发第三个线程,而且采集界面不要卡死不响应,我现在做的是将保存硬件放到第三个线程,创建好之后挂起此线程,待上面结束后恢复保存硬件线程,这样做每次第一次执行程序是完全正确的,不关闭界面第二次采集时,到保存到硬件之前也是没错的,就是触发第三个线程时就出问题了。。老是出现基础类有问题什么的,我在考虑是我没closehandle的原因吗?但是我线程已经返回值了,就应该清除了吧。跪求大神给予指导,或者有什么更好的方法呢
飞天御剑流 2013-10-06
  • 打赏
  • 举报
回复
引用 2 楼 bluedreamTT 的回复:
这样界面会卡死,程序执行大概在20秒以上,所以至少要等待20s,界面就会被卡死
一般而言,界面线程是由一个专门的线程运行的,这个线程一般不使用同步,以避免出现界面不响应的问题。 如果你不想改为这样,可以考虑TryEnterCriticalSection或者InterLocked。
lm_whales 2013-10-06
  • 打赏
  • 举报
回复
至少有以下,两种方式: 1) 处理消息循环,在这个过程中等待子线程结束。 2)子线程结束时,POSTMESSAGE到窗口,主线程收到后,开始处理收尾工作。
bluedreamTT 2013-10-06
  • 打赏
  • 举报
回复
这样界面会卡死,程序执行大概在20秒以上,所以至少要等待20s,界面就会被卡死
modyaj 2013-10-06
  • 打赏
  • 举报
回复
WaitForXXXObject

64,644

社区成员

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

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