0

質問は、IdHTTP を使用してスレッドに実装された HTTP に関するものです。必要に応じて、スレッドを正常に終了したいと考えています。この目的のために、IdHTTP の HTTPWork イベント内で Terminated プロパティを定期的にチェックします。終了プロパティが設定されている場合、IdHTTP.disconnect メソッドが呼び出され、スレッドが終了します。

これは問題なく動作しますが、次の問題のあるシナリオを検討してください。

何らかの理由で、スレッドの開始時にネットワークがダウンします。タイムアウト後にソケット エラー例外が発生しますが、これも問題ありませんが、タイムアウト期間中は IdHTTP から発生するイベントがないため、終了したプロパティを確認する方法がありません。問題は、接続タイムアウト中に IdHTTP を使用するスレッドを正常に終了する方法です。

4

1 に答える 1

2

最も適切なアプローチは、スレッドを強制的にタイムアウトさせずに、単にタイムアウトさせることです。ただし、強制する必要がある場合はTIdHTTP.Disconnect()、ワーカー スレッドを終了しようとしているスレッドなど、別のスレッド コンテキストから呼び出すことができます。後続のソケット操作、またはまだ進行中の操作は、ワーカー スレッドのコンテキスト内でソケット エラーで直ちに失敗します。

于 2014-09-21T20:20:00.143 に答える