Delphi 6.如何设置idTelnet.Connect超时以便在没有连接的情况下提前返回

时间:2017-02-10 08:47:21

标签: delphi indy delphi-6

呼叫idTelnet.Connect通常会立即连接到远程设备 但是,
如果远程设备没有响应, 那么对idTelnet.Connect的调用不会返回 它等待来自远程设备的响应。

这会挂起整个应用程序。

如何设置超时,以便idTelnet.Connect在nn ms内返回 无论是否已建立连接?

1 个答案:

答案 0 :(得分:1)

  

如果远程设备没有响应,则不会返回对idTelnet.Connect的调用。

是的,它会 - 最终。

  

它等待来自远程设备的响应。

或者直到操作系统最终放弃并且连接失败,报告Indy将作为例外引发的错误。

  

这会挂起整个应用程序。

这意味着您在主UI线程的上下文中调用Connect(),您首先不应该这样做。如果你必须这样做,至少在你的MainForm上放置一个TIdAntiFreeze组件(并准备好处理可能引入的任何再入后果)。否则,请将套接字代码移到单独的工作线程中。

  

如何设置超时,以便idTelnet.Connect在nn ms内返回,无论是否已建立连接?

你没有说你正在使用哪个版本的Indy。 Delphi 6很老了。如果您使用的是随附的Indy版本,那么您使用的是Indy 8或者9。{8}在Indy 8中没有超时功能。在Indy 9中,Connect()有一个可选的Connect()参数。在Indy 10中,ATimeout参数已替换为新的ATimeout属性。