呼叫idTelnet.Connect通常会立即连接到远程设备
但是,
如果远程设备没有响应,
那么对idTelnet.Connect的调用不会返回
它等待来自远程设备的响应。
这会挂起整个应用程序。
如何设置超时,以便idTelnet.Connect在nn ms内返回 无论是否已建立连接?
答案 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
属性。