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?