Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2014, 14:59   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Проблемы с пингом

Динамически на ScrollBox создаю список компьютеров, динамически создаются Led компоненты и IdIcmpClient
Код:
//создание индикаторов
led[t]:=TSwitchLed.Create(Form2);
led[t].Parent:=Form1.ScrollBox1;
led[t].Name:='led'+IntToStr(t);
led[t].Height:=26;
led[t].Width:=13;
led[t].Top:=10+(t-1)*led[t].Height;
led[t].Left:=4;
led[t].Visible:=true;

s:= ReadIni('Computers', inttostr(i+1));
l:= pos('=',s);
f:= copy(s,l+1,length(s));
n:= copy(s,0,l-1);
ips[t]:= n;
//создание меток описаний
labels[t]:=Tlabel.Create(Form2);
labels[t].Parent:=Form1.ScrollBox1;
labels[t].Name:='Com_Label'+IntToStr(t);
labels[t].Height:=26;
labels[t].Width:=120;
labels[t].Top:=2+(t-1)*labels[t].Height+8;
labels[t].Left:=24;
labels[t].Visible:=true;
labels[t].Caption:=  f;

//создание клиентов
Client[t]:=TIdIcmpClient.Create(Form2);
Client[t].Name:='Client'+IntToStr(t);
Client[t].Host:= n;
Client[t].OnReply:=Reply;
//Client[t].Ping();
Код:
procedure TForm2.Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
var
 answer:string;
  begin
Form1.answer:=inttostr(AReplyStatus.BytesReceived);
end;
и по таймеру создается поток
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  NewThread: TNewThread;
begin
  NewThread:=TNewThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpLower;
  NewThread.Resume;
end;
Как в потоке считать c IdIcmpClient ReplyStatus
Код:
procedure TNewThread.Execute;
var
i: integer;
s:string;
begin
 for i:= 1 to form1.computers do
if answer <> '0' then
begin
form2.led[i].LedState:=LedOn;
 end
else
 form2.led[i].LedState:=LedOff;
end;

Последний раз редактировалось Aleksandr; 18.09.2014 в 15:28.
Aleksandr вне форума Ответить с цитированием
Старый 18.09.2014, 15:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

IdIcmpClient сделай приватным компонентом потока. Там его создавай там же и освобождай. Тогда и проблем со считкой не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с vba (проблемы создания макросов) Leojse Microsoft Office Excel 4 26.12.2013 20:09
2 проблемы hvz- Win Api 7 03.12.2012 23:53
Помогите с пингом, плиз Ky3Heu, Работа с сетью в Delphi 1 27.04.2009 17:49
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53
Проблемы с пингом под ip KAZzzz Работа с сетью в Delphi 2 19.12.2006 17:01