![]() |
Wo kann ich den Timer Free'en ?
hallo
Delphi-Quellcode:
hat jemand ne idee wie ich den zur laufzeit erzeugten timer wieder aus dem speicher bekomme?
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket); var timer: TTimer; begin SetLength(clients, length(clients)+1); clients[high(clients)] := Socket.RemoteAddress; timer := TTimer.Create(nil); with timer do begin Interval := 30000; OnTimer := TimerEvent; enabled := true; end; listbox1.Items.Add(socket.LocalAddress); end; procedure TForm1.TimerEvent(Sender: TObject); begin ServerSocket1.Socket.Connections[0].Close; // hier müsste ich ihn frei machen. Sender.free; ? end; |
Re: Wo kann ich den Timer Free'en ?
Mach in global. Aber warum erzeugst du ihn nicht zur Design-Zeit und aktiveirst / deaktivierst ihn nur bei Bedarf?
|
Re: Wo kann ich den Timer Free'en ?
hoi,
ich brauche beliebig viele timer, je nachdem wieviele clients auf dem server sind, die sollen nach 30 sekunden wieder getrennt werden, glaube mit global definieren geht das nicht oder? ich weiss ja die anzahl nicht |
Re: Wo kann ich den Timer Free'en ?
Was spricht gegen ein array of TTimer. Hast du doch auch gerade mit den Clients gemacht.
Aber mal was anders. Überdenk dein Konzept noch mal. Wie wäre es mit sowas:
Delphi-Quellcode:
type
TClient = record Name: String; Timer: TTimer; ...; ...; end; end; [..] var ClientArray: array of TClient; |
Re: Wo kann ich den Timer Free'en ?
dagegenspricht nichts, ist eine gute Idee, danke :wink:
|
Re: Wo kann ich den Timer Free'en ?
Zitat:
|
Re: Wo kann ich den Timer Free'en ?
Zitat:
Mit Klassen hab ich noch nicht gearbeitet, wird wohl auch noch dauern :) btw: Ist das mit den timern nicht "gefährlich" ? Sagen wir mal die Timer arbeiten so: Timer1: begin //irgendwas tuen //irgendwas tuen //irgendwas tuen //Lösche Element 0 des dynamischen Arrays end; Timer2: begin //irgendwas tuen //Lösche Element 0 des dynamischen Arrays end; Was ist wenn Timer1 startet, und Timer2 0,1sek später, wenn Timer2 nun eher fertig ist als Timer1 wird ein ganz anderes element gelöscht als das element in dem der timer selbst ist. Gibts da irgendwie ne lösung? |
Re: Wo kann ich den Timer Free'en ?
Zitat:
Ein Problem gibt es dann nur, wenn du Application.ProcessMessages in deinem Timer-Event aufrufst: Denn dieser Aufruf bewirkt, dass ausstehende Nachrichten abgearbeitet werden, also werden evtl. auch die Behandlungsroutinen anderer Timer aufgerufen. |
Re: Wo kann ich den Timer Free'en ?
Da hat Chewie absolut recht, allerdings bei deinem massiven Timergebrauch solltest du dich mal mit SetTimer und KillTimer beschäftigen, dann brauchst du keine Objekte erzeugen und freen. Sparrt ausserdem Prozessorzeit und Ressourcen.
MfG |
Re: Wo kann ich den Timer Free'en ?
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz