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