このコードでは、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が空になると、アクセス違反が表示されるためです。