什么时候可以安全地调用TIdTCPConnection.Disconnect?
问题描述:
我在辅助线程中有h: TIdHTTP
组件,它从URL中检索标题。同时用户单击取消,主线程尝试切断Indy
组件。从主线程拨打thrd.h.Disconnect
安全吗? (虽然h:TIdHTTP
被宣布为公共,所以可以在主线程内访问)什么时候可以安全地调用TIdTCPConnection.Disconnect?
如果它在任何时候都是安全的,我可以在线程中写一个Cancel
函数,它可以被主线程直接调用吗?
在此先感谢
答
是的,主线程可以在套接字上调用Disconnect()
,而工作线程忙于在同一个套接字上读/写数据。读取/写入操作将引发线程可根据需要捕获或忽略的异常。
如果线程正在终止,您也可以将事件处理程序分配给TIdHTTP.OnWork
事件,并使其引发异常,例如SysUtils.Abort()
。
答
取决于你的意思是“安全”什么:)的TidHTTP会当它的插座从下面它拆出来的辅助线程引发异常。如果你抓住并处理它(记录它,显示它或忽略它),那么你应该没问题。
线程/套接字/任何对象的'取消'方法应该也可以 - 然后您可以将TidHTTP组件保留为专用字段。