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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2013, 20:13   #1
holy_0dmin
Новичок
Джуниор
 
Регистрация: 13.04.2011
Сообщений: 2
По умолчанию Indy10 TIdICMPClient - некорректное время пинга

Приветствую всех.

Решил вот недавно опробовать Delphi XE3, да так опробовал что на нем почти написал новый проект, а потом наступил на грабли и не знаю что делать. Создал новый пустой проект, на форму кинул IdICMPClient, Memo и Timer. Поставил свойства IdICMPClient.Host='8.8.8.8', Timeout 1000,
В коде таймера:
Код:
IdIcmpclient1.Ping();
В коде IdICMPClient.OnReply:
Код:
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin
Memo1.Lines.Add(IntToStr(AReplyStatus.MsRoundTripTime));
end;
После запуска проекта в Delphi 7 с Indy9 выдаются реальные задержки, соответствующие консольной команде Ping. При запуске из XE3 с Indy10 выдаются значения 0, 15, 31 в случайном порядке. Гугление не помогло. В исходниках нашел, что время пинга определяется функцией GetTickCount. У Indy9 она своя, а у Indy10 используется системная из библиотеки kernel32. Похоже на какой-то баг, и не ясно как его грамотно и красиво разрулить. Кто-нибудь сталкивался с подобным поведением?
holy_0dmin вне форума Ответить с цитированием
Старый 20.04.2013, 21:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что скажешь насчет этого?:
http://delphiworld.narod.ru/base/little_ping_app.html
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.04.2013, 17:39   #3
holy_0dmin
Новичок
Джуниор
 
Регистрация: 13.04.2011
Сообщений: 2
По умолчанию

То же самое вышло. Причина была в том, что разрешение стандартного виндового таймера 10-15 мсек, и с этим ничего нельзя поделать. Переписал с Indy, но с использованием подсчета количества тактов процессора и делением на частоту процессора. Результаты стали очень точными, тему можно закрывать.
holy_0dmin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компоненты Indy10 zevs5 Работа с сетью в Delphi 4 19.10.2015 15:44
Установка Indy10 AlexMe Компоненты Delphi 1 20.07.2011 21:58
Indy10 Adamrus Компоненты Delphi 6 06.01.2011 00:16
UTF-8 и Indy10 Darw1n Работа с сетью в Delphi 12 21.06.2010 01:27