在这段代码中,正如您在 Connect 上看到的那样,AContext.Data 填充了一些东西
TmyTThreadList = class(TThreadList)
id: integer;
end;
var unique_id:integer;
procedure TfrmTestIdTCPServer.IdTCPServerConnect(AContext: TIdContext);
begin
CS.Enter;
try
inc(unique_id);
finally
CS.Leave;
end;
AContext.Data := myTThreadList.Create;
list := myTThreadList(AContext.Data).LockList;
try
myTThreadList(AContext.Data).id := my_unique_id;
list.Add(myTThreadList(AContext.Data));
finally
myTThreadList(AContext.Data).UnlockList;
end;
end;
然后在断开连接时,编码器在这里检查 Acontext.Data <> nil
procedure TfrmTestIdTCPServer.IdTCPServerDisconnect(AContext: TIdContext);
var
begin
if AContext.Data <> nil then
begin
问题是,他为什么要检查 nil ?
谢谢。
编辑:
我问这个,因为当我做同样的事情时, onExecute 我访问 AContext.Data ,有时(当同时连接许多客户端时) AContext.Data 为空,出现访问冲突。