从外部摧毁Indy Context

时间:2016-08-18 08:36:18

标签: delphi indy

从外部摧毁TIdContext后代的正确方法是什么?我想关闭一个特定的(挂起)连接并破坏它的上下文。

说,我正在从TIdCustomTCPServer.Contexts获取一个元素,并且......我猜是调用Free是不够的。我只是想避免任何陷阱。有时Indy根本不直观。

2 个答案:

答案 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;