調用idTelnet.Connect通常立即連接到遠程設備。
但是,
如果遠程設備沒有響應,則 然後對idTelnet.Connect的調用不返回。
它等待來自遠程設備的響應。德爾福6.如何設置idTelnet.Connect超時無早期返回
這掛起了整個應用程序。
如何設置超時時間,以便idTelnet.Connect在nn ms
之內返回,而不管連接是否已建立?
調用idTelnet.Connect通常立即連接到遠程設備。
但是,
如果遠程設備沒有響應,則 然後對idTelnet.Connect的調用不返回。
它等待來自遠程設備的響應。德爾福6.如何設置idTelnet.Connect超時無早期返回
這掛起了整個應用程序。
如何設置超時時間,以便idTelnet.Connect在nn ms
之內返回,而不管連接是否已建立?
如果遠程設備沒有響應,那麼對idTelnet.Connect的調用不會返回。
是的,它會 - 最終。
它等待來自遠程設備的響應。
或者直到操作系統最終放棄並且連接失敗,報告Indy會作爲例外提出的錯誤。
這掛起了整個應用程序。
這意味着您在主UI線程的上下文中調用了Connect()
,您不應該首先執行此操作。如果必須這樣做,至少在您的MainForm上放置一個TIdAntiFreeze
組件(並準備好處理可能引入的任何重入結果)。否則,請將套接字代碼移至單獨的工作線程。
如何設置超時時間,以便idTelnet.Connect在nn ms內返回,而不管連接是否已建立?
你沒有說你正在使用哪個版本的Indy。德爾福6很古老。如果您使用Indy 8的版本,那麼您使用的是Indy 8或可能是9. Connect()
在Indy 8中根本沒有超時功能。在Indy 9中,Connect()
有一個可選的ATimeout
參數。在Indy 10中,ATimeout
參數被替換爲新的ConnectTimeout
屬性。
我推薦在後臺線程中運行代碼。 – mjn
有沒有ConnectTimeout屬性?如果沒有,我會嘗試當前的Indy 10.6.2 – mjn
在Indy 10中,'TIdTCPClient'具有'ConnectTimeout'屬性。在Indy 9中,沒有'ConnectTimeout'屬性,但'Connect()'有一個可選的'ATimeout'參數。 –