多线程 如何在主线程中判断子线程是否出现卡死 求思路?

xgq8812 2013-04-28 09:33:32
多线程 如何在主线程中判断子线程是否出现卡死 ,如果出现异常卡死 ,就要重启子线程!注:线程卡死并不代表线程执行完了 ,所以用判断线程是否执行完的函数式行不通的。 求高人指点?!
...全文
875 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgq8812 2013-05-08
  • 打赏
  • 举报
回复
已经找到比较好的解决方法了,定义全局变量,赋给系统时间,在要监控的线程里用secondsbetween方法比较时间差,超时就说明子线程卡死了。
xgq8812 2013-04-28
  • 打赏
  • 举报
回复
不是死循环,你的思路可以实现。能具体点吗?我有好多子线程,是不是在每一个子线程里用timer定时为自己flast付now值,主线程多久检测子线程一次较好?
haitao 2013-04-28
  • 打赏
  • 举报
回复
卡死是死循环还是什么? 可以让 线程 定时为自己的一个flast:Tdatetime赋值:=now; 主线程检测线程的flast与now相差如果超过指定5分钟,就是需要杀掉重启线程
蓝色光芒 2013-04-28
  • 打赏
  • 举报
回复
既然不是循环,那就检查卡死的地方,比如WaitForxxx,而又没有信号,在比如Sleep等待时间过长,阻塞Recv无数据到达等等等,先理出可能卡死的地方,根据不同的方法找出相应的策略,让线程安全结束.
「已注销」 2013-04-28
  • 打赏
  • 举报
回复
对于高质量的程序,这种做法是欠妥的,线程的死是有原因的,如果你认为他“死”了,强行结束线程,带来不可预料的后果。 线程应该由自己结束而不是别的线程。如果你不知道为什么卡死,那么也应该有执行线程自己做异常处理。然后结束。
sololie 2013-04-28
  • 打赏
  • 举报
回复
检查网络通信也常常采用心跳包,反正都是叫你一声,你不答应就当你死了
haitao 2013-04-28
  • 打赏
  • 举报
回复
引用 2 楼 xgq8812 的回复:
不是死循环,你的思路可以实现。能具体点吗?我有好多子线程,是不是在每一个子线程里用timer定时为自己flast付now值,主线程多久检测子线程一次较好?
子线程里就不要再用timer了 直接在自己循环时每100(取决于循环周期)次赋值一次好了 楼上的一个加、一个清的机制也可以
Bolo_Yang 2013-04-28
  • 打赏
  • 举报
回复 2
不知道你了解不了解单片机中的看门狗的原理,单片机一死机,狗会自动重启单片机。 原理: 工作中一直喂狗,一但长时间狗没有进食,狗就会认为单片机死机了。 你可以声明一个全局变量 I : Integer ,主线程一直 inc(i),子线程负责 i := 0 ;一但I > N ,就可以认为线程已经死了。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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