求助:Indy 9.0.18中TIdTCPServer停止服务时出错!
Demo里的Chat程序,当下来后不做任何改动直接在IDE里运行,当有客户端连接在服务端的时候,如果服务端按停止服务按钮,就会弹出一系列错误:
{ IdIOHandlerSocket.pas }
function TIdIOHandlerSocket.Recv(var ABuf; ALen: integer): integer;
begin
if Connected then
begin
Result := Binding.Recv(ABuf, ALen, 0);
end
else begin { 第一个停在这句,错误:Disconnected }
raise EIdClosedSocket.Create(RSStatusDisconnected);
end;
end;
{ IdTCPServer.pas }
procedure TIdTCPServer.TerminateAllThreads;
const
LSleepTime: Integer = 250;
var
i: Integer;
LThreads: TList;
LTimedOut: Boolean;
begin
if Assigned(Threads) then begin
LThreads := Threads.LockList; try
for i := 0 to LThreads.Count - 1 do begin
with TIdPeerThread(LThreads[i]) do begin
Connection.DisconnectSocket;
end;
end;
finally Threads.UnlockList; end;
if not TIdThreadSafeList(Threads).IsCountLessThan(1) then begin
LTimedOut := True;
for i := 1 to (TerminateWaitTime div LSleepTime) do begin
Sleep(LSleepTime);
if TIdThreadSafeList(Threads).IsCountLessThan(1) then begin
LTimedOut := False;
Break;
end;
end;
if LTimedOut then begin { 第二个停在这句,错误:TerminateTimeOut }
raise EIdTerminateThreadTimeout.Create(RSTerminateThreadTimeout);
end;
end;
end;
End;
前面有帖子说这是Indy的一个BUG,我按照帖子说得改了源代码重新编译了包再安装上,还是错误依旧。请各位朋友们帮忙看看问题到底出在哪,谢谢!