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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2016, 09:19   #21
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Цитата:
в таком случае не получится создавать выбранное пользователем число потоков
Почему?
Код:
for i := 1 to count Thread.Execute
Каждый поток по завершении в синхронизации сообщает главному потоку программы, что он завершился. Вот и считайте в главном коде завершённые потоки, и по необходимости создавайте новые, отдавая в них новые url.

Последний раз редактировалось vlad1389; 19.03.2016 в 09:23.
vlad1389 вне форума Ответить с цитированием
Старый 19.03.2016, 11:50   #22
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Есть у тебя список URL.
В цикле создаёшь потоки по длине списка.
Ждешь пока все потоки отработают после разрушаешь потоки.
Внутри потока делаешь вывод результата.
"Вывод" делаешь синхронным.

Код:
  for i:=0 to List.Length-1 do
    Threads[i]:=TThread.Create(Suspended); // Поток создаётся сразу спящим

  for i:=0 to List.Length-1 do
    Threads[i].URL:=List[i].Text; // Присваиваем адрес URL

  for i:=0 to List.Length-1 do
       Threads[i].Resume; // Будем все потоки что-бы те начали выполнять Execute

  for i:=0 to List.Length-1 do
      Threads[i].WaitFor; // Ждём завершения

procedure TThread.Execute;
begin
 Self.Checked:=False;
 try
    try
      HTTP:=TIdHTTP.create(nil);
    except
      HTTP.Destroy;
    end; 
    HTTP.HandleRedirects:=false;
    HTTP.ConnectTimeout:=1000;
    HTTP.ReadTimeout:=500;
    
    HTTP.Get(Self.URL);
    if HTTP.ResponseText='HTTP/1.0 200 OK' then Self.Checked:=True; 


 finally  // Даже если будет ошибка, то код ниже выполнится.
   HTTP.Destroy;
   Synchronize(OutPut);
   ReturnValue:=1; // Сигнал для WaitFor, то что поток закончил работу
 end;
end;
Код набирал прям тут. Так что проверяйте.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 19.03.2016, 11:53   #23
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Цитата:
В цикле создаёшь потоки по длине списка.
И 10 000 сайтов успешно будут помечены, как плохие. А почему?
vlad1389 вне форума Ответить с цитированием
Старый 19.03.2016, 12:03   #24
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от vlad1389 Посмотреть сообщение
И 10 000 сайтов успешно будут помечены, как плохие. А почему?
И почему же?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 19.03.2016, 12:07   #25
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

А по тому, что мой роутер не обработает больше 100 одновременных TCP соединений. Создастся очередь, и с большой вероятностью часть потоков не отстоят в очереди по причине окончания таймаута соединения.
vlad1389 вне форума Ответить с цитированием
Старый 19.03.2016, 12:24   #26
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
А по тому, что мой роутер не обработает больше 100 одновременных TCP
Печалька. У моего ограничение на порядок-два выше. Должен же я был оставить на самообучение ТС.

Сделать 2-х уровненную обработку.
Основной список и вспомогательный на 100. Копируешь в маленький частями и отдаешь его на исполнение потоками.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 19.03.2016 в 12:27.
Pavia вне форума Ответить с цитированием
Старый 19.03.2016, 12:31   #27
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Допустим даже 1000 соединений. 9000 станут в очередь, и подохнут. Плюс получим 100% нагрузку на сеть, что в некоторых случаях крайне неприемлемо. Получается, что такой код отработает с ошибками, и повесит сеть. Ну как-то это не очень...
Цитата:
Основной список и вспомогательный на 100. Копируешь в маленький частями и отдаешь его на исполнение потоками.
А не проще сделать, как предложил я? Создать n потоков, число которых задаётся настройкой программы, и чтоб каждый завершаемый поток отдавал команду в главный поток программы на инициализацию нового соединения. Таким образом мы всегда будем иметь n активных потоков до конца работы программы.

Последний раз редактировалось vlad1389; 19.03.2016 в 12:34.
vlad1389 вне форума Ответить с цитированием
Старый 19.03.2016, 14:44   #28
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
А не проще сделать, как предложил я?
Если он проще приведите код сравним.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 19.03.2016, 16:47   #29
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Во первых у меня нет желания писать код ради доказательства, во вторых сравнивать не с чем.
Цитата:
Сделать 2-х уровненную обработку.
Основной список и вспомогательный на 100. Копируешь в маленький частями и отдаешь его на исполнение потоками.
Где код???
vlad1389 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка сайтов на наличие слова на странице VitProff Работа с сетью в Delphi 12 11.10.2014 13:02
многопоточная сортировка в winapi Arrioh Помощь студентам 0 09.06.2013 23:40
Многопоточная загрузка RelictOs Общие вопросы Delphi 0 04.01.2013 14:52
многопоточная сортировка слиянием gagarin614 Помощь студентам 0 03.10.2012 16:03
Многопоточная программа kakawkin Общие вопросы Delphi 4 05.06.2011 00:33