【发布时间】:2011-11-15 20:23:44
【问题描述】:
我正在对 Delphi 7 Indy9 轮询客户端进行故障排除。我尝试添加带有waitforsingleobject 的 TEvent 以及许多其他优雅断开连接的方法。错误发生在 readln 中。该错误通常是“EIDConnection...未连接”。我已经对其进行了监视,并且线程终止了。但是“while”在连接从服务器接收到消息之前不会重新评估条件,所以它只是在readln 处进行研磨,直到它接收到一个消息。所以有时它会优雅地断开连接,但大多数时候会崩溃。有没有办法做到这一点,或者我只是试一试......除了在 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应该 not 继续运行,因为异常会跳出循环。所以我不明白你到底遇到了什么问题。