从外部摧毁TIdContext
后代的正确方法是什么?我想关闭一个特定的(挂起)连接并破坏它的上下文。
说,我正在从TIdCustomTCPServer.Contexts
获取一个元素,并且......我猜是调用Free
是不够的。我只是想避免任何陷阱。有时Indy根本不直观。
答案 0 :(得分:3)
从外部摧毁TIdContext后代的正确方法是什么?
根本不做它。您没有Context对象,没有业务可以销毁它们。服务器拥有它们,它将为您管理它们。
我想关闭一个特定的(挂起)连接并破坏它的上下文。
当拥有的线程终止时,Context会自动销毁。默认情况下,该线程在关联的套接字关闭时终止。除非您手动调用Disconnect()
,否则请确保您的事件处理程序不会阻止例外。
说,我从TIdCustomTCPServer.Contexts中获取了一个元素,并且......我猜这个是免费的。
请不要直接破坏上下文。但是,您可以调用Context.Connection.Disconnect()
。
答案 1 :(得分:2)
你可能想要使用这样的东西。不要释放任何背景
var
i: Integer;
list: TList;
begin
list := IdTCPServer1.Contexts.LockList;
try
for i := 0 to list.Count-1 do
begin
try
TIdContext(list.Items[i]).Connection.Disconnect;
except
end;
end;
finally
IdTCPServer1.Contexts.UnlockList;
end;
end;