Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

AW: PING als If-Abfrage

  Alt 13. Jun 2016, 10:45
Wieso nutzt Du nicht das Event und fragst da den Status mit IF ab ? Ist der Ping erfolgreich, führe Deinen Code aus, ist der Ping nicht Erfolgreich gib eine Meldung aus zum Beispiel.
Das wird bei 'nem Programmablauf in der Form aber nicht funktionieren:
Delphi-Quellcode:
procedure irgendwie;
begin
  if a = b then begin
    irgendwas;
  end else begin
    if Ping_Erfolgreich('xxx.xxx.xxx.xxx') then begin
      MachWennPingErfolgreich;
    end else begin
      MachWennPingNichtErfolgreich;
    end;
  end;
end;
Nur mal so als Idee:

Ping_Erfolgreich sei also eine Funktion, dann könnte man dadrin eventuell sowas machen:
Delphi-Quellcode:
var
    fPingOk;

function Ping_Erfolgreich(aAddress : String) : Boolean;
var
         i : Integer;
         iSleep : Integer;
begin
  fPingOk := False;
  i := 0;
  iSleep := 100;
  Ping.Address := aAddress;
  Ping.Ping;
  repeat
    i := i + iSleep;
    Sleep(iSleep);
    Application.ProcessMessages; // oder sonstwasfürnenschleifeninhalt
  until fPingOk or (i > Ping.TimeOut);
  Result := fPingOk;
end;
In dem Ereignis der Pingkomponente, in dem man feststellen kann, ob das Ping erfolgreich war, wird bei Erfolg fPingOk auf True gesetzt.

Ist zwar unelegant und Objektorientierung sieht anders aus, aber es mag erstmal gehen.
Ansonsten halt eine Ableitung der Pingkomponente schreiben, die beim Ping eben wartet und in 'nem Attribut über Erfolg oder Misserfolg informiert.

Sprich: Meine obige "Krücke" in 'ner Komponente kapseln.
  Mit Zitat antworten Zitat