我使用Delphi 10.2 Tokyo和Indy(集成版本)。
方案: 我在线程中执行http GET请求(TIdHttp),并使用代理。 有时,代理似乎会导致Indy不会超时,而不会从GET返回。 我还指定onWork事件处理程序对Abort按钮作出反应,并在此处理程序中调用idHttp.Disconnect函数。当GET似乎被冻结时,中止也不起作用,可能在这种情况下onWork事件没有被触发,我不知道。
主线程空闲,只创建50个线程,每个线程通过其TIdHttp实例进行GET。 Ans metiumes,正如我mentioend,GET的代理原因是不在“悬挂”线程中返回哪个结果。
我的问题是:如何从外部线程强制Indy中止?当GET拒绝返回时,有什么可以通过代码完成的吗?
答案 0 :(得分:0)
我通过使用后台线程断开套接字并实现超时来解决我的问题,这似乎工作甚至socket被“冻结”并且onWork未被触发。 我这样做是通过将我创建的TIdHttp实例添加到数组中,以及创建实例的时间。如果GET返回正常,则将删除数组条目。在后台线程中,我检查用户是否单击了Abort,然后遍历数组并在每个实例上调用disconnect。如果达到超时时间,我也会检查同一个线程,并且还会调用disconnect。 可能不是完美的解决方案,但它对我有用。