delphi多线程怎么判断某个线程已经挂了

yanghaiyanghai 2018-04-18 10:55:45
我的线程启动代码为以下代码,一次启动n个线程,每个线程都会根据传入进去的数字处理自己的业务逻辑,但是在长时间运行的过程中发现某个线程会掉,这个线程没有了,我怎么发现某个线程没有了?比方说我一次启动5个线程,运行一个星期后有一个线程掉了,我的主程序怎么发现这个线程掉了并启动了?


for li_i:=1 to gl_filesync_pid do
begin
myThread := TSendFileThread.Create;
myThread.pid:= inttostr(li_i);
myThread.OnTerminate := MyOnTerminate;
myThread.Resume;
end;

...全文
964 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
22222bbb 2018-04-18
  • 打赏
  • 举报
回复
如果是正常结束的话,MyOnTerminate这里可以处理,或者SendMessage给主窗口都可以,可以带个参数,识别是哪一个线程。如果是线程死了,并没有destroy的话,你需要检查你的程序是不是哪里有问题了
  • 打赏
  • 举报
回复
可以使用看门狗技术,开一个单独的watch线程,或者主线程中用Timer,每个被监视的线程周期性设置某个标志,watch线程周期性清除这些标志,如果探测到某个线程的标志被清除之后在一个超时时间之内没有被重新设置,则可以认为该线程出问题了,终止它/记录日志之类的。一般在可靠性要求高的系统,军用级、宇航级之类的,都有硬件看门狗,有些还不止一个,事务处理型软件要求没那么高,软件实现一个就可以了。

5,388

社区成员

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

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