如何保证主线程在子线程结束之后才结束

yimao_44 2014-05-18 10:50:07
由于主线程的函数返回的值是子线程的调用函数返回值,所以我必须保证子线程没有结束的时候主线程不能结束,这个要怎么做啊?球大侠
下面的是我的主线程的这个函数

LONG CWTainWebCtrl::WTwainAcquireImage(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: Add your dispatch handler code here
if(g_maxImgSave > g_pimgList.size())
{
g_bTerminate = FALSE;
g_ThreadProcScan = AfxBeginThread(ThreadProcScan,m_hWnd);
g_ThreadProcScan->m_bAutoDelete = TRUE;
g_ThreadDrawImg = AfxBeginThread(ThreadDrawImg,m_hWnd);
g_ThreadDrawImg->m_bAutoDelete = TRUE;
}
return 0;

}


这只是一个粗略的代码 至少返回值是不对的,我需要在这个函数里面返回子线程函数ThreadProcScan的结果作为主线程函数WTwainAcquireImage 的结果

怎么处理 谢谢啦
...全文
416 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
other_other 2014-05-19
  • 打赏
  • 举报
回复
我还是楼主 就是换了个账号 因为痛一个账号不能连续发三个发言 如何保证 现在必须等view Ondraw完了 在干其他的事情去 如何保证 现在必须等view Ondraw完了 在干其他的事情去 大侠们 see see啊
yimao_44 2014-05-19
  • 打赏
  • 举报
回复
不想重开帖子 我在UINT ThreadDrawImg(LPVOID lparam)这个函数里面发送了自定义消息SendMessage(g_WTainWebCtrl->m_pImgView->m_hWnd,WM_NEW_IMG,(WPARAM)i,NULL); 就是希望在view类里面来一张图片画一个图片 在相应的view类里面有响应函数LRESULT CImgView::OnAddImg(WPARAM wParam, LPARAM lParam) 在OnAddImg里面调用了Invalidate 在以前未在WTwainAcquireImage(主线程函数)里面添加事件保证子线程结束之前这个函数才退出时,invalidate基本实时画图,现在跟到这个代码的时候没有立即进ondraw函数,
ouyh12345 2014-05-19
  • 打赏
  • 举报
回复
WaitForSingleObject
yimao_44 2014-05-19
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
WaitForMultiObject ,使用在运行的线程句柄数组做参数
我只是觉得很奇怪 我只在线程AfxBeginThread(ThreadProcScan,m_hWnd); 结束的时候才设置有信号的话,那么主线程不是按照道理一直处于阻塞状态的吗?如果处于阻塞状态她应该不和另外两个线程抢CPU,那么另外的两个子线程应该还是以前的方式正常的扫描和ondraw才对,但是结果却不是的,似乎发的消息要他ondraw不响应只响应了最后一张图片的ondraw消息
yimao_44 2014-05-19
  • 打赏
  • 举报
回复
引用 3 楼 accsoar 的回复:
因为你有两个子线程,你要等两个都结束的话: 1. 用WaitForSingleObject分别等两个子线程结束 2. 用WaitForMultipleObject同时等两个子线程,推荐用这个
我只是觉得很奇怪 我只在线程AfxBeginThread(ThreadProcScan,m_hWnd); 结束的时候才设置有信号的话,那么主线程不是按照道理一直处于阻塞状态的吗?如果处于阻塞状态她应该不和另外两个线程抢CPU,那么另外的两个子线程应该还是以前的方式正常的扫描和ondraw才对,但是结果却不是的,似乎发的消息要他ondraw不响应只响应了最后一张图片的ondraw消息
worldy 2014-05-19
  • 打赏
  • 举报
回复
WaitForMultiObject ,使用在运行的线程句柄数组做参数
yimao_44 2014-05-19
  • 打赏
  • 举报
回复
引用 3 楼 accsoar 的回复:
因为你有两个子线程,你要等两个都结束的话: 1. 用WaitForSingleObject分别等两个子线程结束 2. 用WaitForMultipleObject同时等两个子线程,推荐用这个
现在很烦恼 这两个子线程以前是一个负责扫描图像,一个复杂把图像ondraw上去的 以前就那样写可以同时扫描同时ondraw,现在用了什么事件WaitForSingleObject之后 那个ondraw就不是实现ondraw了,只ondraw最后一张图片了
accsoar 2014-05-19
  • 打赏
  • 举报
回复
因为你有两个子线程,你要等两个都结束的话: 1. 用WaitForSingleObject分别等两个子线程结束 2. 用WaitForMultipleObject同时等两个子线程,推荐用这个
小小爬虾 2014-05-18
  • 打赏
  • 举报
回复
用同步事件Event不就可以吗?

15,471

社区成员

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

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