多线程 如何在主线程中判断子线程是否出现卡死 ,如果出现异常卡死 ,就要重启子线程!注:线程卡死并不代表线程执行完了 ,所以用判断线程是否执行完的函数式行不通的。 求高人指点?!

解决方案 »

  1.   

    卡死是死循环还是什么?
    可以让 线程 定时为自己的一个flast:Tdatetime赋值:=now;
    主线程检测线程的flast与now相差如果超过指定5分钟,就是需要杀掉重启线程
      

  2.   

    不是死循环,你的思路可以实现。能具体点吗?我有好多子线程,是不是在每一个子线程里用timer定时为自己flast付now值,主线程多久检测子线程一次较好?
      

  3.   

    不知道你了解不了解单片机中的看门狗的原理,单片机一死机,狗会自动重启单片机。
    原理:
        工作中一直喂狗,一但长时间狗没有进食,狗就会认为单片机死机了。你可以声明一个全局变量 I : Integer ,主线程一直 inc(i),子线程负责 i := 0 ;一但I > N ,就可以认为线程已经死了。
     
      

  4.   


    子线程里就不要再用timer了
    直接在自己循环时每100(取决于循环周期)次赋值一次好了
    楼上的一个加、一个清的机制也可以
      

  5.   

    既然不是循环,那就检查卡死的地方,比如WaitForxxx,而又没有信号,在比如Sleep等待时间过长,阻塞Recv无数据到达等等等,先理出可能卡死的地方,根据不同的方法找出相应的策略,让线程安全结束.
      

  6.   

    已经找到比较好的解决方法了,定义全局变量,赋给系统时间,在要监控的线程里用secondsbetween方法比较时间差,超时就说明子线程卡死了。