我有一个连接,我给了20秒超时(慢速链接)。我需要允许我的用户取消此连接呼叫。
我已经在线程中发生了连接,这样我就可以保持GUI的运行,但是如何告诉Indy取消?我还必须从主线程调用取消,因为连接调用被阻止。这可能吗?
这适用于C ++ Builder,但Delphi的答案也可以。
答案 0 :(得分:8)
中止Connect()的唯一方法是从与调用Connect()的线程上下文不同的线程上下文中调用Disconnect()。在这种情况下,您的主线程可以直接调用Disconnect(),然后您的线程可以处理Connect()引发的异常响应。
答案 1 :(得分:0)
也许另一种方法是创建自己的TIdAntiFreeze后代,并且在它的Process()方法中抛出一个错误,如果客户端想要退出会中止连接尝试,然后你可以捕获这个特定的错误并做出相应的响应。 / p>
创建TIdAntiFreeze组件后,连接例程应该找到它。您可以使用IdleTimeout属性对其进行微调,这是调用DoProcess()方法的频率。
或者,创建一个您自己的IOHandler,它使用像AntiFreeze代码那样的TIdConnectThread并更优雅地处理错误。