ICMP pingowanie aynchroniczne.

0

Witajcie
Robię jeden programik na zaliczenie, muszę w nim pingować inne stację. Robię to w ten sposób:

 
procedure TMainForm.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
var
  i: integer;
begin
 (..)
end;

  ProgressBar.StepIt;
end;
 
 for i := 1 to DataGrid.RowCount - 1 do
  begin

    IdIcmpClient1.host := DataGrid.Cells[0,i];
    IdIcmpClient1.Ping();
    Application.ProcessMessages;
  end;

Niestety problemem jest, że jeżeli stacja docelowa jest wyłączona wtedy "IdIcmpClient1.Ping();" czeka aż to timeoutu blokując program. Nie do końca to rozumiem, wolałbym aby na wszystkie stacje wysyłać od razu pinga, a odpowiednie zdarzenie niech się wywołuje w chwili powrotu pakietu. Da się tak zrobić? Pomożecie?

Pozdrawiam

0

Wybaczcie, pomyliłem działy, proszę o przeniesienie (zbyt wiele projektów w jednym czasie w różnych językach..)

0

Jeśli komponent IdAntiFreeze nie pomaga to wrzuć to do wątku.

0

Pomaga połowicznie: nie zawiesza komputera, jednak i tak pingi nie wychodzą wszystkie naraz a pojedynczo.. Przy 20 komputerach na liście program wisi 20sek (zakładam, że wszystkie są wyłączone a timeout = 1sek) zamiast lekko ponad 1sek. No, może nie wisi, bo okno jest aktywne, ale czas pingowania nadal jest wydłużony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1