Einzelnen Beitrag anzeigen

Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#10

Re: Wo kann ich den Timer Free'en ?

  Alt 12. Feb 2004, 15:05
Hallo,

ich dachte Timer arbeiten wie Threat's. SetTimer, Killtimer? wie reagiere ich da auf timer events? mal in der hilgfe gucken, hoffentlich steht da was.


btw:

Delphi-Quellcode:
type
  TClientInfo = record
    Address: string;
    Timer: TTimer;
  end;

...

var
  Form1: TForm1;
  ClientInfo: Array of TClientInfo;

...

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  timer: TTimer;
begin
  SetLength(ClientInfo, length(ClientInfo)+1);
  ClientInfo[high(ClientInfo)].Address := Socket.RemoteAddress;
  timer := TTimer.Create(nil);
  with timer do
  begin
    Interval := 30000;
    OnTimer := TimerEvent;
    enabled := true;
  end;
  listbox1.Items.Add(Socket.RemoteAddress);
end;

procedure TForm1.TimerEvent(Sender: TObject);
var
  i: integer;
begin
  ServerSocket1.Socket.Connections[0].Close;
  ClientInfo[0].Timer.Free;
  for i := 0 to high(ClientInfo)-1 do
    ClientInfo[i] := ClientInfo[i+1];
  SetLength(ClientInfo, high(ClientInfo)-1);
end;

wenn ich jetzt z.b mit dem IE 2mal zur gleichen zeit meine ip + port aufrufe, stehen 2 ips (meine) in der listbox, also funktioniert noch alles normal, aber wenn das ontimer event auftritt krieg ich eine zugriffsverletzung, aber wieso?
Mario
  Mit Zitat antworten Zitat