在idTCPServer.active:=false之前检查一下idTCPServer的监听线程队列是否关闭,因为你是强制性断开与客户端的连接,监听线程还在工作,突然关掉服务端当然会报线程超时。
List:TList;
List:=idTCPServer.Threads.LockList;
try
for i:=0 to List.Count-1 do
TidPeerThread(List.Items).connection.disconnect;
finally
idTCPServer.Threads.unLockList;
end;
idTCPServer.Active:=false;