Thema: Delphi Pinger Tool

Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Pinger Tool

  Alt 19. Aug 2013, 22:07
Wenn dein Hauptformular geschlossen wird, solltest du den Thread(s) höflich mitteilen, dass jetzt Schluß ist:
Delphi-Quellcode:
mythread.Terminate; // setzt property Terminated auf True
Sleep(1050); // warten bis Thread sich selbst beendet hat
Grundsätzlich ist es gefährlich, wenn Threads weiterlaufen aber der Hauptthread terminiert wird.
Dazu musst du natürlich die Thread-Objekte in einer Variablen speichern, damit du beim Programmende darauf zugreifen kannst.
Der Sleep()-Aufruf ist zwar etwas primitiv, weil so die ganze Anwendung min. 1 Sekunde nicht reagiert aber als schnelle, einfache Lösung geht das schon.
Du kannst die Reaktionszeit bis die Threads auf das Terminate reagieren so verringern:
Delphi-Quellcode:
procedure TPinger.Execute;
var
  i : Integer;
begin
    i := 0;
    while not Terminated or (benutzer <> nil) or (benutzer.getSocket <> nil) do
    begin
      if i mod 5 = 0 then
         benutzer.PING(); // 1 Ping ungefähr alle 1000ms
      Inc(i);
      Sleep(200);
    end;
end;
fork me on Github
  Mit Zitat antworten Zitat