C++主线程等待子线程结束

小火龙呢 2018-01-05 03:35:11
主线程:
hThread = (HANDLE)_beginthreadex( NULL, 0, &ThreadFun, NULL, 0, &nThreadID );

StartWork()

OnDownloadButton(index);//执行其他操作

-------------------------------------------------------------------------------------------

BOOL CAuto_DownloadDlg::StartWork(int nThreadIndex)
{
UpdateData(TRUE);

//初始化
PostThreadMessage(m_tid[nThreadIndex], WM_INIT_DISK, NULL, NULL);
//下载
PostThreadMessage(m_tid[nThreadIndex], WM_DOWN_FILE, NULL, NULL);
}

DWORD WINAPI ThreadFun(LPVOID lp)
{
int nIndex = (int)lp;
MSG msg;

while(GetMessage(&msg, NULL, 0, 0))
{
DWORD dwRtn = 0;
switch(msg.message)
{
case WM_INIT_DISK:
g_pDlg->InitDisk(nIndex);
break;
case WM_DOWN_FILE:
...
}
}
}
...全文
1431 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
@遇见O_o 2019-07-05
  • 打赏
  • 举报
回复
试着使用原子操作,
小火龙呢 2018-01-08
  • 打赏
  • 举报
回复
修改了代码逻辑,把主线程的 ondownloadbutton 放到子线程去运行了,算是能跑通了
maoge8888 2018-01-05
  • 打赏
  • 举报
回复
ondownloadbutton前加waitforsingleobject(子线程句柄,。。。。)
赵4老师 2018-01-05
  • 打赏
  • 举报
回复
《Windows核心编程》
啊哈moment 2018-01-05
  • 打赏
  • 举报
回复
bool bRet = CreateProcess(NULL, (LPWSTR)(LPCTSTR)strParam, NULL, NULL , FALSE, 0, NULL, NULL, &sInfo, &pInfo);
	WaitForSingleObject(pInfo.hProcess, INFINITE);
	::CloseHandle(pInfo.hThread);
	::CloseHandle(pInfo.hProcess);
等待hHandle 结束后返回
小火龙呢 2018-01-05
  • 打赏
  • 举报
回复
OnDownloadButton 必须要等待子线程的结果执行完才能进行,现在是子线程在执行中,主线程就进入到了 OnDownloadButton,程序直接崩溃,有什么办法吗?求助了

65,186

社区成员

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

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