我正在排除Delphi 7 Indy9輪詢客戶端的故障。我曾嘗試添加一個帶有waitforsingleobject
的Tevent和許多其他方式來優雅地斷開連接。錯誤發生在readln中。錯誤通常是'EIDConnection ...未連接'。我已經把它看了一遍,線程終止。但'while'不會重新評估條件,直到連接從服務器接收到一個msg,所以它只會在readln
上磨合,直到收到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'不應該保持運行,因爲異常跳出循環。所以我不明白你到底有什麼問題。 –