关于线程,救命!

cloudboy 2000-04-04 06:51:00
我在主线程中启动了一个辅助线程,我想让主线程启动辅助线程后先停下来,等待辅助线程返回后再继续运行
,请问如何通知主线程,辅助线程已返回,可以继续运行?是不是要用互斥变量?有没有简单的办法?
...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzw 2000-04-04
  • 打赏
  • 举报
回复
sniper 和 laole的方法最简单,而且就应该是采取这种方法的.
其他的方法太累赘了.
「已注销」 2000-04-04
  • 打赏
  • 举报
回复
1.在主线程HANDLE hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
CreateThread();
WaitForSingleObject(hEvent,INFINITE);
2.在辅线程 SetEvent(hEvent);
laole 2000-04-04
  • 打赏
  • 举报
回复
最简单的的方法是在主线程中作如下的操作:
假设你的辅助线程叫ThreadProc,参数是Param
CWinThread* pThread=AfxBeginThread(ThreadProc,(LPVOID*)Param);
WaitForSingleObject(pThread->m_hThread,WAIT_TIME);
~~~~~~~~ 等待时间只要超过你的线程运行时间就可以了
Eie 2000-04-04
  • 打赏
  • 举报
回复
用CEvent更好:
#include <afxmt.h>

CEvent gevnFinished;

辅助现成:
...
...
gevnFinished.SetEvent();
return 0;

在主线程的等待点处:
.....
::WaitForSingleObject(gevnFinished,INFINITE);
.....
Eie 2000-04-04
  • 打赏
  • 举报
回复
用通知消息
exm:

辅助现成:

UINT MyProc(LPVOID lParam)
{
......//你的代码

::AfxGetMainWnd()->PostMessage(MY_MSG,wParam,lParam);
return 0;
}

主线程:

消息影射:
afx_msg HRESULT OnFinished(WPARAM,LPARAM)
....
ON_MESSAGE(MY_MSG,OnFinished)
.....

HRESULT CMy...::OnFinished(...)
{
...
}
lljip 2000-04-04
  • 打赏
  • 举报
回复
使用全局变量
for example:
BOOL FEndThread;
//主线程中:
FEndThread=True;
启动辅助线程程序块
。。。。
while(TRUE)
{ if (not FEndThread) break;
}

//辅助线程程序块
1。执行模块
2。线程返回时使用
FEndThread=False;


注意问题:辅助线程根确保不能是死循环,否则程序会死机
Sniper 2000-04-04
  • 打赏
  • 举报
回复
你可以用辅助线程进行同步。
在主线程启动辅助线程后,调用WaitForSingleObject(hThread, dwTimeOut)使主线程挂起,等待辅助线程返回。
其中hThread为你的辅助线程句柄,dwTimeOut为最长等待时间,设置该参数以防止死锁发生。
crazyhorse 2000-04-04
  • 打赏
  • 举报
回复
同意zhongshan99的意见!

15,471

社区成员

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

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