什么时候可以安全地调用TIdTCPConnection.Disconnect?

问题描述:

我在辅助线程中有h: TIdHTTP组件,它从URL中检索标题。同时用户单击取消,主线程尝试切断Indy组件。从主线程拨打thrd.h.Disconnect安全吗? (虽然h:TIdHTTP被宣布为公共,所以可以在主线程内访问)什么时候可以安全地调用TIdTCPConnection.Disconnect?

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

在此先感谢

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

如果线程正在终止,您也可以将事件处理程序分配给TIdHTTP.OnWork事件,并使其引发异常,例如SysUtils.Abort()

取决于你的意思是“安全”什么:)的TidHTTP会当它的插座从下面它拆出来的辅助线程引发异常。如果你抓住并处理它(记录它,显示它或忽略它),那么你应该没问题。

线程/套接字/任何对象的'取消'方法应该也可以 - 然后您可以将TidHTTP组件保留为专用字段。