Форум программистов
Правила форума  |  Исходники Delphi  |  Основы Delphi  |  Блог программистов  |  Рассылка  |  Закажи футболку!  |  Конкурс программистов призы на 2000 руб


Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi

Ответ
 
Опции темы
Старый 18.12.2006, 15:01   #1
Квэнди
Модератор
Заслуженный модератор
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Адрес: Москва
Сообщений: 3,884
Репутация: 1179
Отправить сообщение для Квэнди с помощью ICQ
По умолчанию Многопоточный Ping

Итак: использую 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мс .. если проверять в цикле обычным способом, то результаты правильные. Может быть кто- нибудь подскажет в чем именно проблема ?
__________________
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить ping Маркъ Работа с сетью в Delphi 6 31.08.2008 17:32
Многопоточный сервер FAiver Работа с сетью в Delphi 18 31.03.2008 08:51
Ping Баламут Работа с сетью в Delphi 5 23.08.2007 15:17
многопоточный сервер мандарин Работа с сетью в Delphi 6 24.04.2007 07:22


Все интернет-магазины Москвы на Викимарте: компьютеры и софт, художественные книги и профессиональная литература, наручные часы.



04:29.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.

Ask Doctor at Healpth.com