|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.12.2020, 11:32 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Скачать файл в многопотоке
Здравствуйте.
Для ускорения скачивания файла, его необходимо скачивать в многопотоке. Создаём несколько потоков, каждый из которых качает разные части файла. Потом их склеиваем и готово. Но наткнулся на проблему. Всё работает только если качаемый файл уже находится в кеше. А если файла в кеше нет, то первый поток качает несколько килобайт или мегабайт и зависает. Остальные потоки запускаются и создают файлы, но ничего не качают. А если вызывать InternetOpenUrl() так: Код:
Что делать? Последний раз редактировалось BLACK_RAIN; 11.12.2020 в 11:34. |
11.12.2020, 16:25 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
11.12.2020, 18:36 | #3 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
11.12.2020, 19:23 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
11.12.2020, 20:11 | #5 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
то есть, вот так
Код:
|
12.12.2020, 08:26 | #6 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Код:
Последний раз редактировалось BLACK_RAIN; 12.12.2020 в 09:26. |
12.12.2020, 10:41 | #7 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
12.12.2020, 11:34 | #8 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Решил посмотреть, что будет если подождать завершения скачивания. Выяснилась странная хрень.
Первый поток начинает качать сразу. Второй только через какое-то время (примерно через две минуты, но это не точно). Третьего и остальных я не стал дожидаться. Код выглядит так: Код:
А в NetLimier'е написано, что в моём процессе есть 9 потоков и 8 из них что-то качают. Получается, что они качают один файл? Но ведь в коде не это написано. Что вообще происходит? Последний раз редактировалось BLACK_RAIN; 12.12.2020 в 11:58. |
12.12.2020, 12:13 | #9 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Я понял. Проблема в функции InternetSetFilePointer(). Если ее убрать, то все потоки стартуют одновременно и начинают качать сразу. Но тогда все потоки качают файл с самого начала.
Как указать, с какого места нужно скачивать файл? |
12.12.2020, 12:57 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
скачать файл | brownb | Общие вопросы Delphi | 5 | 12.08.2017 12:07 |
Скачать файл | KaDima28 | JavaScript, Ajax | 1 | 29.12.2014 07:41 |
curl: скачать файл | WebbMan | C/C++ Сетевое программирование | 2 | 23.04.2011 15:21 |
Скачать файл... | Romix | Работа с сетью в Delphi | 1 | 28.07.2010 09:37 |
Скачать файл из архива | pesi | Работа с сетью в Delphi | 4 | 29.09.2009 21:28 |