Moin,
ich habe folgendes:
Delphi-Quellcode:
procedure TServServ.TimerHandler(Sender: TObject);
var
I: Integer;
begin
for I := FUserList.Count-1 downto 0 do
if (TUser(FUserList.Items[I]).FLastMessage + FSessionTimeout) < GetTickCount then
TUser(FUserList.Items[I]).FSocket.Close;
end;
function TServServ.UserBySock(Socket: TCustomWinSocket): TUser;
var
I: Integer;
begin
Result := nil;
for I := 0 to FUserList.Count-1 do
if TUser(FUserList.Items[I]).FSocket = Socket then
Result := TUser(FUserList.Items[I]);
end;
procedure TServServ.ClientDisconnect(Sender: TObject; ASocket: TCustomWinSocket);
begin
messagebox(0, pchar(inttostr(FUserList.Count)), 'hi', 0);
FUserList.Remove(UserBySock(ASocket));
end;
Die MessageBox ist nur Testweise drin. Es handelt sich hier um einen ServerSocket. Wenn ich auf diesen mit einem Client verbinde, wird dieser nach 5 Sekunden disconnectet (FLastMessage + FSessionTimeout) < GetTickCount), das Problem ist, dass nach diesen 5 Sekunden unendlich MessageBoxen (aus der ClientDisconnect prozedur) aufpoppen, dass muss heissen, dass das Timer event ewig einen User findet der länger als 5 Sekunden verbunden ist, das wiederrum muss heissen, dass obwohl der User bereits disconnected ist, sein Objekt in der Userlist noch existiert.... wie aber kann das sein? ich lösche es doch: "FUserList.Remove(UserBySock(ASocket));"
Hm.... vielleicht hat ja jemand nen Tipp