Delphi 7 Indy9 폴링 클라이언트 문제를 해결하고 있습니다. 나는 waitforsingleobject
으로 TEvent를 추가하려고 시도했고 우아하게 연결을 끊는 다른 많은 방법을 시도했다. readln에서 오류가 발생합니다. 일반적으로 오류는 'EIDConnection ... not connected'입니다. 나는 그것에 시계를 달았고 쓰레드는 끝났다. 'while'은 연결이 서버에서 msg를 수신 할 때까지 조건을 재평가하지 않으므로 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'은 계속 실행되지 않습니다. 그래서 나는 당신이 정확히 무슨 문제가 있는지 이해하지 못합니다. –