Итак: использую Indy9.5 +BDS2005 +Winxp:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient,SyncObjs, ExtCtrls ;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TPrimeThrd = class(TThread)
private
FHost : AnsiString;
idping : tidicmpclient;
protected
procedure Execute; override;
procedure update;
constructor Create(Host:AnsiString);
end;
var
Form1: TForm1;
int,count:integer;
arthrd:array[1..1000] of TPrimeThrd;
implementation
{$R *.dfm}
constructor TPrimeThrd.Create(Host: AnsiString);
begin
inherited Create(False);
FreeOnTerminate:=True;
FHost := Host;
end;
procedure tprimethrd.execute;
begin
idping:=tidicmpclient.Create(nil);
try
idping.Host := FHost;
idping.Ping;
Synchronize(update);
finally
idping.Free
end
end;
procedure tprimethrd.update;
begin
form1.Memo1.Lines.Add(form1.Edit1.Text+' '+inttostr(idping.ReplyStatus.MsRoundTripTime));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
count:=1;
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if count<100 then
begin
arthrd[count]:=TPrimeThrd.Create(edit1.Text);
inc(count);
end
else
begin
timer1.Enabled:=false;
memo1.Lines.Add('ВСЕ!!!');
end;
end;
end.
Все предельно просто, однако:
результаты пинга получаются почему- то абсолютно случайно, то есть если проверять на хосте, у которого изначально задержка более 650мс , то он может выдать числа от 25мс до 2000мс .. если проверять в цикле обычным способом, то результаты правильные. Может быть кто- нибудь подскажет в чем именно проблема ?