Delphi 7 Indy9ポーリングクライアントのトラブルシューティングを行っています。私はwaitforsingleobject
のTEventを追加しようとしました。エラーはreadlnで発生します。エラーは通常 'EIDConnection ... not connected'です。私はそれに時計を入れて、スレッドが終了します。接続がサーバーからmsgを受け取るまで、 'while'は条件を再評価しないので、msgを受け取るまではreadln
にグラインドします。時にはそれは正常に切断されますが、ほとんどの場合クラッシュします。これを行うにまたは私はちょうど私があなたが切断イベントを処理するためのいくつかのコードを追加する必要があると思うクライアントスレッドを正常に閉じる
procedure TReadingThread.Execute;
begin
while not Terminated and FConn.Connected do
begin
// read msg from server
Msg := FConn.ReadLn;
Synchronize(ReceiveLine);
end;
end;
実際の問題は何ですか?接続がクローズされている場合、 'ReadLn()'は例外的に例外を送出すると想定されます*。 'Connected()'への呼び出しを削除し、 'ReadLn()'にその処理をさせます。例外がスレッドを終了させる場合(これは正しいことでしょう)、例外がループから飛び出してから、 'while'は実行されない*ではありません。だから私はあなたが正確に何が問題になっているのか理解していない。 –