如何在不中断线程的情况下处理ADO致命网络错误'执行?

时间:2014-04-25 21:36:15

标签: multithreading delphi exception-handling ado

注意:类似于How to handle TIdHTTP fatal network errors without interrupting thread's execution?但处理TADOConnection致命网络错误的问题。

非常感谢您就TThread TADOConnection程序中Execute处理致命网络错误的建议。

我的应用在while..do程序中运行Execute循环。每个循环都通过TADOConnection.Execute()进行数据库更新。所有循环异常都在循环级别处理。还有一个on E: Exception do的上级处理程序(Execute级别)。

在活动网络操作期间,远程数据库服务器上发生致命网络错误。出现问题并且在循环线程中间报告他们无法找到数据库服务器的路径(命名管道提供程序错误,EOleException等)网络在10分钟内返回。

我想确保在网络突然死亡的情况下,每个线程都会以某种方式:

  1. 检测到(嗯,这是最简单的)
  2. 抽出一个关节并等待网络回来。
  3. 确保网络正常运行。
  4. 重新建立连接并恢复所有网络连接。
  5. 继续循环。
  6. 期望的结果是保持线程正常运行并且能够解决临时网络问题。线程必须定期检查网络是否恢复。如果是,异常处理程序必须恢复所有ADO引擎调用线程的RestoreNetworkConnection,然后继续循环。

    我绝对不想要的 - 是阻止线程的执行。

    问题

    1. 我应该拦截哪些事件/例外来处理致命的网络错误?
    2. Execute内放置异常处理程序的位置?
    3. 重新建立连接回正常状态的正确方法是什么?

0 个答案:

没有答案