Thema: Delphi Jede Sekunde ein Ping

Einzelnen Beitrag anzeigen

Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Jede Sekunde ein Ping

  Alt 22. Mär 2009, 20:33
Hi,
ich möchte gerne genau einmal pro Sekunde eine Adresse anpingen und dann entweder eine Antwortzeit, oder eben ein timeout haben, wobei ich dann jede Antwort die nicht innerhalb dieser einen Sekunde ankommt als timeout zähle.

In einem ersten Versuch habe ich dazu jede Sekunde einmal das Ping Programm von Windows aufgerufen, und als Parameter ein Timeout von etwas unter einer Sekunde gewählt und genau einen Ping gesendet. Die Konsolenausgabe hab ich dann geparsed und war eigentlich schon glücklich, nur dann fiel mir auf, dass bei dem Fall das er den Hostnamen der angepingt werden soll nicht auflösen kann, es mehr als eine Sekunde dauert bis ich dieses Resultat erhalte und den nächsten Ping losschicken kann. das versaut mir dann meine Statistik weil mir eine Sekunde in der ich kein Ping Resultat (Zeit oder timeout) bekommen hab fehlt.

Dann hab ich noch etwas recherchiert und die Komponente IdIcmpClient von den Jedis gefunden. Aber hier das selbe Problem, ich kann zwar ein Timeout von einer Sekunde einstellen, doch das Feststellen, dass der Hostname nicht aufgelöst werden kann, dauert ca. zwei Sekunden.

Ich hatte mir dann überlegt einfach einen Timer zu nehmen, der einmal pro Sekunde pingt (das hatte ich bisher auf schon) und für den Fall das noch keine Antwort über das Ereignis IdIcmpClient1Reply gekommen ist, diesen Ping als timeout zählt und den nächsten losschickt. Leider scheint der IdIcmpClient1.Ping(); Aufruf das Programm zu blockieren bis er den Fehler beim Auflösen des Hosts feststellt, so dass ich so auch nicht weiterkomme.

Ich müsste irgendwie das Versenden der Pings vom restlichen Programm abspalten und Auswerten aber ich habe keine rechte Ahnung von Thread Programmierung.


Ich hoffe mein Problem ist klar geworden und jemand hatt eine Idee wie ich es schaffe sekündlich einen Ping zu versenden und falls in der Zeit bis zum nächsten Ping keine Antwort kommt diesen zu verwerfen.


Ich danke schonmal im Vorraus.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat