0

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

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

提前致谢

4

2 回答 2

2

取决于您所说的“安全”的含义:) 当从其下方撕下其套接字时,TidHTTP 将在辅助线程中引发异常。如果你抓住它并处理它,(记录它,显示它或忽略它),那么你应该没问题。

线程/套接字/任何对象的“取消”方法也应该没问题 - 然后您可以将 TidHTTP 组件保留为私有字段。

于 2012-07-24T15:13:24.753 回答
2

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

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

于 2012-07-24T18:07:25.323 回答