Thema: Delphi Pinger Tool

Einzelnen Beitrag anzeigen

Balthasar

Registriert seit: 11. Jan 2009
9 Beiträge
 
#8

AW: Pinger Tool

  Alt 19. Aug 2013, 22:45
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;
Das ist ein wirklich sehr guter Vorschlag, ich danke vielmals.
Mittlerweile ist mein Problem auch komplett gelöst, im While-Block fehlte lediglich eine weitere Bedingung an die ich anfangs nicht dachte: (benutzer.getSocket.connected).
Mittlerweile kämpfe ich gegen andere Probleme, aber die schaffe ich schon wenn ich etwas mehr beider Sache bin
Danke nochmals an alle Helfer!!
  Mit Zitat antworten Zitat