Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пинг


Страницы:   1 2 3 4 5

DeeNamid ©   (2008-08-04 12:48:00) 

Вопрос такой, делаю пять потоков которые пингуют каждый свою машину и выводять результаты на пять окон, проблема с icmp-компонентом. Все пять потоков толкутся около icmp.ping() и результаты пинга искажаются.
Код примерно такой:

procedure Tping1.Execute;
begin
 while not (terminated or application.Terminated) do begin
//EnterCriticalSection(CS);
 res:=ping_func(ip_addres);
//LeaveCriticalSection(CS);
 synchronize(print_res);
 end;
end;

function Tping1.ping_func(host:string):integer;
var i,failed:integer;
begin
 icmp.ReceiveTimeout:=3000;
 icmp.Host:=host;
 icmp.Ping();
 if icmp.ReplyStatus.ReplyStatusType<>rsTimeOut then
   ping_func:=icmp.ReplyStatus.MsRoundTripTime
  else
   ping_func:=0;
end;

Когда ставишь критическую секцию результаты отображаются адекватно, но пока один поток пингует все остальные его ждут. Как сделать так что бы все пинговалось независимо друг от друга?


Anatoly Podgoretsky   (2008-08-05 11:47:00) [21]

> Сергей М.  (05.08.2008 11:40:08)  [68]

Я на индейцах давно поставил очень большой крест. А нас разные пути, я по своей дороге иду, а индейцы по своей. И разбираться с ихним монстром и конкретными функциями у меня нет никакого желания, тем более, что чем дальше, тем больше монстр становится. Кажется уже и авторы сами не понимают, как это вообще работает.


Сергей М.   (2008-08-05 11:45:00) [22]


> здесь ведь наверно надо указать создателя компонента


На суть "проблемы" это никакне влияет.


Anatoly Podgoretsky   (2008-08-05 11:42:00) [23]

> DeeNamid  (05.08.2008 11:36:07)  [67]

Не обязательно, можно и nil, ведь все зависит от того, кто будет уничтожать компонент, будет ли где либо использоваться значение Owner.

Лично я так никогда не делаю, только Self, разумеется не по отношению к TIdIcmpClient, а ко всем компонентам.


Dennis I. Komarov   (2008-08-05 11:41:00) [24]

> [67] DeeNamid ©   (05.08.08 11:36)

для чего?


Medbe}I{onok XML   (2008-08-05 11:40:00) [25]

создатель - это ты


Сергей М.   (2008-08-05 11:40:00) [26]


> у него почему то исчезает многопоточность


Нет, он понимает, почему она исчезает.
Но не понимает, что icmp-запросы требуют уникальнойидентификации секвенций.
В случае с IcmpSendEcho это требование, по всей видимости, обеспечивается неявно, в случае с индейскими ро-сокетами это нужно делать явно.


DeeNamid   (2008-08-05 11:36:00) [27]


> Anatoly Podgoretsky ©   (05.08.08 11:32) [66]

Все ты правильно говоришь.

А скажите мне такую вещь
icmp:=TIdIcmpClient.Create(nil);
здесь ведь наверно надо указать создателя компонента icmp?


Anatoly Podgoretsky   (2008-08-05 11:32:00) [28]

> Сергей М.  (05.08.2008 11:16:05)  [65]

Так считать не надо, он пишет, что если он раскомментирует эти строки, то у него почему то исчезает многопоточность. А когда комментирует, то у него возникает проблема с порчей переменных.


Сергей М.   (2008-08-05 11:16:00) [29]


> Anatoly Podgoretsky ©   (05.08.08 11:13) [64]


Строки, управляющие КС, у него везде закомментарены.
Считаем, что он КС не использует.


Anatoly Podgoretsky   (2008-08-05 11:13:00) [30]

> Сергей М.  (05.08.2008 11:02:01)  [61]

Не из его кода

EnterCriticalSection(CS);
res:=ping_func(ip_addres);
LeaveCriticalSection(CS);

Вот это убивает многопоточность.


Anatoly Podgoretsky   (2008-08-05 11:12:00) [31]

> DeeNamid  (05.08.2008 10:39:00)  [60]

Потому что у тебя программа не работает.
И с чего ты взял, что не могу, ты не путай не хочу с не могу.


Сергей М.   (2008-08-05 11:11:00) [32]


> покажите мне мои ошибки


Ты не учитываешь вот это:

SequenceID is a Word value used as a packet identifier for the Ping request. SequenceID is also used when decoding the response packets for a Ping request. When SequenceID contains a non-zero value, it is used to match an echo response to the original ping request with the same sequence identifer. SequenceID can be set to a unique value to identify a specific Ping request and/or response

Copyright © 1993-2006, Chad Z. Hower (aka Kudzu) and the Indy Pit Crew. All rights reserved.


Сергей М.   (2008-08-05 11:02:00) [33]


> Anatoly Podgoretsky ©   (05.08.08 09:30) [53]


Ты имеешь ввиду КС в потрохах самОй IcmpSendEcho ?


DeeNamid   (2008-08-05 10:39:00) [34]


> Anatoly Podgoretsky

А кому не лень? И зачем ты тогда говоришь что у меня ошибки в реализации, если не можешь на эти ошибки указать?


Anatoly Podgoretsky   (2008-08-05 10:28:00) [35]

> DeeNamid  (05.08.2008 10:25:58)  [58]

А нафига мне столько раз смотреть?
Проси кого ни будь другого, кому не лень много раз смотреть.


DeeNamid   (2008-08-05 10:25:00) [36]


> Anatoly Podgoretsky

Елки-палки, да что там разбираться, 40 строк кода. Посмотри на 10-ый пост, там весь код написан.


Anatoly Podgoretsky   (2008-08-05 10:08:00) [37]

А всем лень в таком коде разбираться. Слишком много телепатии надо применять.


DeeNamid   (2008-08-05 09:59:00) [38]


> Anatoly Podgoretsky


Покажи где. Два дня прошу людей - покажите мне мои ошибки.


Anatoly Podgoretsky   (2008-08-05 09:52:00) [39]

> DeeNamid  (05.08.2008 9:47:54)  [54]

Так у тебя ошибки в реализации, потому и ерунда.


DeeNamid   (2008-08-05 09:47:00) [40]


> Anatoly Podgoretsky

Ну да, вот тут и проблема, а если не защищать то получается ерунда


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо