何时可以安全地调用TIdTCPConnection.Disconnect?

时间:2012-07-24 14:40:43

标签: multithreading delphi indy

我在辅助线程中有一个h: TIdHTTP组件,它正在从URL检索标头。同时用户单击取消,主线程尝试实际断开Indy组件。从主线程中调用thrd.h.Disconnect是否安全? (虽然h:TIdHTTP被声明为公共,因此可以在主线程中访问)

如果它在任何时候都是安全的,我可以在线程中编写一个Cancel函数,可以由主线程直接调用吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

取决于'safe'的意思:)当TidHTTP的套接字被从其下面撕掉时,TidHTTP将在辅助线程中引发异常。如果你抓住并处理它,(记录,显示或忽略它),那么你应该没问题。

线程/套接字/任何对象的'cancel'方法也应该没问题 - 然后你可以将TidHTTP组件保存为私有字段。

答案 1 :(得分:2)

是的,当工作线程忙于通过同一个套接字读取/写入数据时,主线程可以在套接字上调用Disconnect()。读/写操作将引发线程可以根据需要捕获或忽略的异常。

您还可以为TIdHTTP.OnWork事件分配一个事件处理程序,如果该线程被终止,它会引发异常,例如使用SysUtils.Abort()