大家说说用什么方法来保存已连接的用户。要考虑到用户断开时要能删除这个节点。如果用Tlist保存的话,做得不好在删除节点时就要每一个用户地查找,然后才能删除这节点。如:
  TClient=class
  Athread:TIdPeerThread;
  Username:string[20];
var 
online=Tlist;procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
var
i:integer;
username:string;
begin
for i:=0 to online.count-1 do
  begin
    if Tclient(online.items[i]).Athread=Athread then  online.items.delete(i);
exit;
  end;
end;
这种方法如果用户多的情况下,严重映响效率。大家来谈谈什么更好的方法。比如用athread.data保存当前记录在列表中的地址。可以不用像这样每次删除操作都要对表查询一次的?

解决方案 »

  1.   

    TUser = record
                NickName,
                Password,
                State: string;
                AdminLevel,
                Fame,
                Exp,
                UserLevel,
                Right: integer;
                AvailDate: TDateTime;
                Online: Boolean;
                Socket: TCustomWinSocket;
                DateTime: TDateTIme;
                IPAddress: string;
        end;    Users: array[1..500] of TUser;希望这个标准的在线用户库设计对你有所帮助,虽然这里是用的是 ServerSocket
      

  2.   

    to lgqTiger(【老虎】) [email protected]谢谢