Thema: Delphi Jede Sekunde ein Ping

Einzelnen Beitrag anzeigen

Antigo

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

Re: Jede Sekunde ein Ping

  Alt 22. Mär 2009, 23:12
danke für den hinweis. ich werd mich mal schlau machen.

Vielleicht hat ja zwischenzeitlich noch jemand Ideen zu folgendem:

wollte das ganze jetzt doch mit der ping.exe von Window lösen. Idee war diesen Aufruf in einen Thread auszulagern und mit einem timer nach einer Sekunde zu gucken ob eine Antwort gekommen ist und diese ausgeben. Falls keine Antwort gekommen ist, sollte der Thread beendet werden ein Timeout ausgegeben und ein neuer Thread gestarten werden. Das Problem ist, dass ich den Thread der ja noch läuft nicht beenden kann... daher hab ich ein Speicherleck soweit ich das beurteilen kann, denn im Taskmanager wird der vom Programm verbrauchte Speicher immer größer...

Der Thread
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
  beep;
  str:=Konsole('ping heise.de1 -n 1 -w 800');
  if not terminated then
    Synchronize(Update)
  else self.free;
end;

procedure TMyThread.Update;
begin
  Form1.SetTime(str);
end;

procedure TForm1.SetTime(Atime:string);
begin
  time:=Atime;
  done:=true;
end;
Der Timer
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  mythread:=TMyThread.Create(false);
  timer1.enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if done then
    memo1.lines.Add(FormatDateTime('dd.mm.yyyy, hh:mm:ss: ',Now)+time)
  else
    memo1.lines.Add(FormatDateTime('dd.mm.yyyy, hh:mm:ss: ',Now)+'Timeout');
 
  mythread.Terminate;
  mythread:=TMyThread.Create(false);
end;

Funktionieren tut das ganze sogar, nur wie gesagt wird der Speicher Verbrauch immer gößer, da die Threads wohl alle bestehen bleiben.


Jemand ne idee?
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat