|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.07.2019, 16:46 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
скачать несколько файлов одновременно (многопоточность не работает)
Здравствуйте.
Нужно скачать несколько файлов одновременно. Для каждого файла создаю отдельный поток. В каждом экземпляре потока заранее прописан URL и имя файла, куда сохранять. Потом по кнопке запускаю несколько потоков. В папке для скачивания появляется столько файлов, сколько потоков я запустил. Но одновременно качаются только 2 файла. Когда скачался один, начинает качаться следующий. Но не более двух одновременно Почему так? Где ошибка? Код:
Последний раз редактировалось BLACK_RAIN; 21.07.2019 в 18:36. |
22.07.2019, 08:24 | #2 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Попробовал качать через компонент TIdHTTP - всё работает. Но компонент глюкавый и неудобный.
По-этому я написал такой код: Код:
В другом проекте я создаю динамический массив из TFrame и в каждом фрейме создаю поток, в котором при помощи этого кода качается файл. Там даже синхронизация с формой есть. И всё работает. А почему здесь качается не более двух файлов одновременно, хотя для каждого создан отдельный поток? |
23.07.2019, 09:38 | #3 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Я обнаружил вот что.
например, вот код, выполняемый в потоке: Код:
Теперь добавим функции WinAPI, которые лезут в интернет: Код:
Однако, если переместить строчку hUrl := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0); до начала цикла, то есть сделать вот так: Код:
В чем прикол-то??? |
23.07.2019, 10:18 | #4 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
ИБ требует от сервера ограничения потоков с IP Адреса как правило 4 иногда и вовсе 2.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
23.07.2019, 10:49 | #5 | |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Что такое ИБ?
Цитата:
во-вторых: в другом проекте я создаю динамический массив из TFrame. В каждом фрейме создается поток, который качает файл. И всё работает. в-третьх: в моем последнем посте в потоках ничего с интернета не качается. Там просто URL открывается. Перечитайте внимательней. Каким образом открытый URL может остановить поток? Особенно, если в разных фреймах это работает? Почему без фреймов не работает? Последний раз редактировалось BLACK_RAIN; 23.07.2019 в 11:59. |
|
24.07.2019, 09:24 | #6 | |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Цитата:
Все потоки (кроме первых двух) просто зависают на строчке hUrl := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0); не зависимо от содержащегося далее кода. То есть, что бы там ни было написано, оно дальше строчки hUrl := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0); не доходит. никто не знает, почему? |
|
24.07.2019, 15:29 | #7 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Код:
|
25.07.2019, 12:01 | #8 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
вчера методом тыка обнаружилось, что если вместо hInet написать nil - всё работает.
но почему надо писать именно nil? и что такое ИБ? |
25.07.2019, 12:06 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
25.07.2019, 12:49 | #10 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли одновременно изучать несколько ЯП | Salih Abubakr | Помощь студентам | 6 | 10.01.2017 11:57 |
Несколько USB-модемов одновременно | ImmortalAlexSan | Компьютерное железо | 5 | 12.05.2014 18:44 |
Insert в несколько таблиц одновременно. | alexandro704 | БД в Delphi | 8 | 29.04.2011 11:42 |
Как вывести несколько одинаковых форм одновременно | k1r1ch | Общие вопросы Delphi | 11 | 22.08.2009 18:07 |
Вставка даты в несколько DBDateTimeEditEh одновременно!? | John_chek | Компоненты Delphi | 3 | 12.02.2007 16:34 |