讨论个多线程退出的问题

cryptonym 2005-06-23 11:02:43
不知道在多线程的程序退出的时候你们都采用什么办法保证线程安全退出。

我是在主线程中释放信号,work线程检测到后退出,主线程检测到所有work都退出后退出,结束程序运行。你们都是只要吗?
...全文
280 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aben456 2005-06-24
  • 打赏
  • 举报
回复
EVENT机制就够用了
goodboyws 2005-06-24
  • 打赏
  • 举报
回复
SetEvent(hEvent);
主线程
int iThread = 0;
while (iThread < nThreadCount)
{
DWORD result ;
MSG msg ;

while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
DispatchMessage(&msg);
}
result = MsgWaitForMultipleObjects(nThreadCount, lphThread,
FALSE, INFINITE, QS_ALLINPUT);


if (result == (WAIT_OBJECT_0 + nThreadCount))
{

continue;
}
else
{
iThread++;
}
}
cryptonym 2005-06-24
  • 打赏
  • 举报
回复
如果你的某一个work线程在长时间干一个活,或者他根本就死掉了。这个时候你主线程岂不是退不出去哦。
我觉得隔一段时间发现某个work没退出就杀了他然后主线程退出。
DentistryDoctor 2005-06-24
  • 打赏
  • 举报
回复
SetEvent/WaitForMultiObjects

在工作线程中WaitForSingleObject
Event应该是手动复位的。
lianglp 2005-06-24
  • 打赏
  • 举报
回复
利用线程句柄就可以了,再在主线程中调用
WaitFor...(hThread,INFINITE);
进行等待,当等待函数返回后,可以保存线程肯定结束了。
qrlvls 2005-06-24
  • 打赏
  • 举报
回复
如果你的某一个work线程在长时间干一个活,或者他根本就死掉了。这个时候你主线程岂不是退不出去哦。
我觉得隔一段时间发现某个work没退出就杀了他然后主线程退出。
-------------------------------------
如果有这样的情况也是由于程序结构不合理造成的
xfwei1234 2005-06-24
  • 打赏
  • 举报
回复
呵呵,小弟刚做这个程序了,就是和楼主的一样啊,这样没有问题啊,呵呵
不过也期待高手来有更牛的方法啊
qrlvls 2005-06-23
  • 打赏
  • 举报
回复
1.线程中WaitForMultiObjects,退出时 SetEvent 给出退出事件
2.线程中 PeekMessage,退出时 PostThreadMessage
总之是为了让线程主动结束
truewill 2005-06-23
  • 打赏
  • 举报
回复
一堆bool的全局变量咯
主线程检查全true就推出
其他结束时设置对应那个为true
xing_xing_xing 2005-06-23
  • 打赏
  • 举报
回复
一样

15,471

社区成员

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

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