vc中如何在另外的一个线程中关闭另外一个线程然后重新启动这个线程

qq_25741339 2016-01-23 04:21:07
两个线程

1、一个线程是监控线程,用来检测工作线程,监视线程检测到异常后,需要然工作线程重新启动(不是挂起后启动,是从头来重新开始运行)

2、一个是工作线程,执行所有的代码,里面包含各种死循环(这些循环是必要的)

我现在的思路是在监视线程中使用TerminateThread 来关闭,然后重新创建工作线程,但是查了很多资料都说不要用TerminateThread 存在资源泄漏!很多都是用一个全局指针,现在问题来了,如果说采用一个全局的参数来监控,但是我的工作线程中存在大量的循环,又不知道何时出现异常,所以采用一个全局指针的方式貌似的行不通的,现在请问该怎么下手呢?这个问题纠结很久了,实在没办法了来这里求助了,渴望能解决这个问题!
...全文
240 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-25
  • 打赏
  • 举报
回复
《Windows核心编程》
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
如果worker实在搞不清楚自己是怎么死的,那么是不是跟其它线程耦合太紧密了?有没有办法解耦合?
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
另外worker有没有能力监测自己的异常,循环的终止条件能不能添加判断
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
你还是想用一个全局变量做信号量?也没什么问题,在你自己的循环里轮询,查到退出值,就擦擦屁股自杀即可。另外,如果worker里的死循环不是为了响应消息,或外部事件,我觉得其实可以重新考虑一下worker的设计,是否包揽了不该自己做的工作,或者是否可以拆分。
qq_25741339 2016-01-23
  • 打赏
  • 举报
回复
引用 6 楼 desertwolves 的回复:
http://www.cnblogs.com/pugang/archive/2012/08/24/2654278.html
这样一来还有在线程中维护一个线程消息列队
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
http://www.cnblogs.com/pugang/archive/2012/08/24/2654278.html
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
怎么发?你是想说worker没空处理消息吗?
qq_25741339 2016-01-23
  • 打赏
  • 举报
回复
引用 2 楼 desertwolves 的回复:
还是建议发消息给worker,worker把自己干掉,这样比较干净。worker里如果有需要长时间占用cpu的操作,可以考虑一下是否有阻塞,或者考虑一下worker的设计是否合理,工作流程是否可以拆分。
关键是怎么在监视线程中发送消息告知worker线程
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
另外,可以参考iocp模型,干掉线程再创建可能不是最好的选择
大漠狼族 2016-01-23
  • 打赏
  • 举报
回复
还是建议发消息给worker,worker把自己干掉,这样比较干净。worker里如果有需要长时间占用cpu的操作,可以考虑一下是否有阻塞,或者考虑一下worker的设计是否合理,工作流程是否可以拆分。
oyljerry 2016-01-23
  • 打赏
  • 举报
回复
可以发送线程消息,PostThreadMessage,然后再CreateThread启动线程

15,471

社区成员

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

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