リモートデバイスが応答しない場合、idTelnet.Connectの呼び出しは返されません。
はい、最終的になります。
リモートデバイスからの応答を待ちます。
OSが最終的にあきらめて接続に失敗するまで、Indyが例外として発生させるエラーを報告します。
これは、アプリケーション全体をハングします。
つまり、最初に行うべきではないメインのUIスレッドのコンテキストでConnect()
を呼び出していることを意味します。これを行う必要がある場合は、少なくとも、TIdAntiFreeze
コンポーネントをMainFormに配置します(そして、導入される可能性があるリエントリの結果を処理できるように準備してください)。それ以外の場合は、ソケットコードを別のワーカースレッドに移動してください。
接続が確立されているかどうかにかかわらず、idTelnet.Connectがnn ms以内に戻るようにタイムアウトを設定するにはどうすればよいですか?
使用しているインディのバージョンはありません。 Delphi 6は非常に古いです。 Indy 8には、出荷時のバージョンのIndyを使用している場合は、Indy 8または多分9を使用しています。Connect()
は、Indy 8ではタイムアウト機能が全くありません。Indy 9では、ATimeout
というパラメータがあります。 Indy 10では、ATimeout
パラメータが新しいConnectTimeout
プロパティに置き換えられました。
コードをバックグラウンドスレッドで実行することをお勧めします。 – mjn
ConnectTimeoutプロパティはありますか?もしそうでなければ、現在のIndyを試してみよう10.6.2 – mjn
Indy 10では、 'TIdTCPClient'は' ConnectTimeout'プロパティを持っています。 Indy 9では 'ConnectTimeout'プロパティはありませんが、' Connect() 'にはオプションの' ATimeout'パラメータがあります。 –