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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2013, 17:42   #1
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию [ping]

вообщем программка получает время приема-передачи до сервера. 10 запросов по 32 байта. реализована через ICMP.
вопрос в следующем... в списке 8 серверов. если запускаю сразу 8 потоков получается что время пинга немного отличается, если про пинговать все сервера по очереди)
может быть из-за загруженности канала? или это косяк в реализации потоков? и каким образом будет правильнее организовать пинг списка серверов?
unbanned вне форума Ответить с цитированием
Старый 04.07.2013, 14:59   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

А к такому выводу привели серьезные исследования? Нет, я не придираюсь. Правда интересно. Просто ради интереса запустил сейчас тест и в какой-то момент мне тоже так показалось. Но погоняв его подольше что-то разницы не заметил. Особенно в части среднего времени
Баламут вне форума Ответить с цитированием
Старый 04.07.2013, 16:03   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Показывайте, как потоки получают список/сервер для пинга.
А вообще не должно влиять на сеть это.

Пакеты маленькие.
Человек_Борща вне форума Ответить с цитированием
Старый 08.07.2013, 13:27   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

2 Баламут, никаких серьезных исследований раз 5 прогнал с потоками, раз 5 по очереди... в итоге пришел к выводу, что если пинговать сервера по очереди, то среднее время получается меньше. вполне возможно показалось... теперь я уже не так уверен.

что касается кода...

сильно не ругаться, я только учусь

ну собственно получается так)
глобально объявлена переменная типа Tstringlist
в нее из текстовика подгружается список серверов.

при создании потока передается номер сервера...

Код:
procedure TForm1.mStartThread(n: integer);
var
  NewThread: TNewThread;
begin
  NewThread := TNewThread.Create(true);
  NewThread.FreeOnTerminate := true;
  NewThread.Priority := tpLower;
  NewThread.serv_no := n;
  NewThread.Resume;
end;
Код:
type
  TNewThread = class(TThread)
  private
    serv_no: integer;
    ping: integer;
    procedure addping;
    procedure getping;
    { Private declarations }
  protected
    procedure Execute; override;
  end;
Код:
procedure TNewThread.Execute;
begin
  inherited;
  getping;
  Synchronize(addping);
end;
Код:
procedure TNewThread.getping;
begin
  ping := Form1.check(PChar(servers.strings[serv_no-1]));
end;

Последний раз редактировалось unbanned; 08.07.2013 в 17:33.
unbanned вне форума Ответить с цитированием
Старый 08.07.2013, 13:27   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

нечаянно продублировал сообщение

Последний раз редактировалось unbanned; 08.07.2013 в 15:41. Причина: дубль. можно удалить
unbanned вне форума Ответить с цитированием
Старый 08.07.2013, 20:47   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Мат. часть читать, мигом!
НИКОГДА, вообще НИКОГДА из потока не сунуться в форму если метод не синхронизируется. Отсюда и все ваши тормоза.
Человек_Борща вне форума Ответить с цитированием
Старый 08.07.2013, 22:23   #7
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

дык читал вроде. Насколько я понял синхронизировать надо если что-то изменяется на форме? Например вывод значений пинга в memo. У меня это процедура addping. Синхронизирована check, это просто функция описанная в форме. Грубо говоря она не обращается и не изменяет ни каких компонентов на форме. В этом случае тоже нужна синхронизация?

Последний раз редактировалось unbanned; 08.07.2013 в 22:34.
unbanned вне форума Ответить с цитированием
Старый 08.07.2013, 22:46   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
В этом случае тоже нужна синхронизация?
Синхронизация нужна в любом случае обращения к форме.
Человек_Борща вне форума Ответить с цитированием
Старый 09.07.2013, 14:06   #9
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

спасибо исправлю. наверное, правильнее будет описать эту процедуру в потоке
unbanned вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ping Шамиль8284 Софт 1 27.05.2013 13:28
Не работает ping Lotles C/C++ Сетевое программирование 1 01.06.2012 20:19
ping на c++ маришка001 Помощь студентам 3 30.10.2011 11:51
ping TaTT DoGG Общие вопросы .NET 2 06.10.2008 12:48
Ping Баламут Работа с сетью в Delphi 5 23.08.2007 15:17