Delphi:如何在连接超时期间优雅地终止使用IdHTTP的线程?

时间:2014-09-20 20:00:37

标签: multithreading delphi http idhttp

问题是关于使用IdHTTP在线程中实现HTTP。我想在需要时优雅地终止线程。为此,我在IdHTTP的HTTPWork事件中定期检查Terminated属性。如果设置了terminate属性,则调用IdHTTP.disconnect方法并终止该线程。

这很好用,但请考虑以下有问题的情况:

由于某种原因,网络在线程启动时出现故障。超时后有一个套接字错误异常也没问题,但是在超时间隔期间没有从IdHTTP触发事件,因此无法检查终止属性。所以问题是如何在连接超时期间优雅地终止使用IdHTTP的线程?

1 个答案:

答案 0 :(得分:2)

最优雅的方法是简单地让线程超时,不要试图强迫它。但是如果你必须强制它,你可以从另一个线程上下文中调用TIdHTTP.Disconnect(),例如试图终止你的工作线程的线程上下文。任何后续套接字操作或任何仍在进行的操作都将立即失败,并在工作线程的上下文中出现套接字错误。