我在辅助线程中有一个h: TIdHTTP
组件,它正在从URL检索标头。同时用户单击取消,主线程尝试实际断开Indy
组件。从主线程中调用thrd.h.Disconnect
是否安全? (虽然h:TIdHTTP
被声明为公共,因此可以在主线程中访问)
如果它在任何时候都是安全的,我可以在线程中编写一个Cancel
函数,可以由主线程直接调用吗?
提前致谢
答案 0 :(得分:2)
取决于'safe'的意思:)当TidHTTP的套接字被从其下面撕掉时,TidHTTP将在辅助线程中引发异常。如果你抓住并处理它,(记录,显示或忽略它),那么你应该没问题。
线程/套接字/任何对象的'cancel'方法也应该没问题 - 然后你可以将TidHTTP组件保存为私有字段。
答案 1 :(得分:2)
是的,当工作线程忙于通过同一个套接字读取/写入数据时,主线程可以在套接字上调用Disconnect()
。读/写操作将引发线程可以根据需要捕获或忽略的异常。
您还可以为TIdHTTP.OnWork
事件分配一个事件处理程序,如果该线程被终止,它会引发异常,例如使用SysUtils.Abort()
。