![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Организовать в проекте скачивание файлов по принципу работы Reget
allrussia © (2006-06-05 11:45:00)Вопрос в следующем:
есть процедура закачки файла, допустим URLDownload (URL: string)
или компонент WinHTTP (utilmind) и т.п. и процедура WinHTTP.Get... и .т.д.
работает она в отдельном потоке (не ругайте, не знаю как правильно сформулировать)
в общем если код будет выглядеть так:
begin
WinHTTP.GEt (URL);
Showmessage ('');
end
то после запуска сразу вылетит сообщение
Так вот, а нужно дождаться завершения первой команды а потом показать сообщение.
В Reget (или в аналогах) закачки могут закачиваться друг за другом, т.е. если мне надо скачать 100 файлов
я пишу
типа for i:=0 to 99 do WinHTTP.Get (URL+inttostr(i))
у меня срабатывает только 1 закачка, а нужно чтобы все друг за другом закачались и при этом форма не тормозила
В общем: как реализовать скачку файла в отдельном потоке, дождаться завершения, начать закачку следующего, и .т.д., и чтоб форма не тормозила вообще (как в Регет), или компонент посоветуйте, пожалуйста
я думаю мастерам это раз плюнуть
Спасибо
allrussia (2006-06-05 16:55:00) [1]Dmitrij_K
нет к тебе претензий нет :) и не может быть спасибо за помощь! :beer
представляешь я совершенно случайно сейчас обнаружил компонент который делает именно ТО, что нужно называется
TipHTTPClient из пакета TurboPower Internet Professional
метод GetWait
...
for i:=1 to 50 do if can = false then
ipHTTPClient1.GetWait (URL+inttostr(i));
if can = false then Showmessage ('Все успешно скачалось!')
...
...
can:=true;
ipHTTPClient1.Cancel
...
и прогресс есть + завершение и ErrorCodes
специально для тебя даю ссылку правда весит много 16 мб
http://slil.ru/22811567
Dmitrij_K (2006-06-05 16:18:00) [2]Ну извени....
PS
Я не знаю что такое WinHTTP/ Там что нет события прогресса и завершения скачивания?
Может подойдет связка IdHTTP + AntiFrize , форма будет подвисать но не смертельно
allrussia (2006-06-05 15:58:00) [3]Dmitrij_K
мне не совсем это подходит
моя задача вот:
код типа
begin
HTTP.Get (URL1);
HTTP.Get (URL2);
HTTP.Get (URL3);
Showmessage ('Complete')
end;
или тоже самое но в цикле
при этом чтоб форма не тормозила и было событие onProgress и onComplete
а то что ты предлагаешь я могу и так сделать с помощью компонента WinHTTP
Dmitrij_K (2006-06-05 15:15:00) [4]Это только тест многопоточности.
На форме расположено 4 мемки
в первой мемке очередь на скачивания
например
http://www.delphimaster.ru/cgi-bin/forum.pl?n=0
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18
http://www.delphimaster.ru/cgi-bin/forum.pl?n=1
http://www.delphimaster.ru/cgi-bin/forum.pl?n=5
жмешь на кнопку
программа запускает потоки (кол-во ThreadCount)
в memo2 показывает что качается
в 3 - что скачаловь
4 - что не скачалось
У меня вместо мемок в проекте StringList
При завершении скачивания срабатывает событие FinishEventProcв переменной mem (TMemoryStream)содержится то что скачалось
И пока в мемо1 есть строки программа будет скачивать их.
allrussia (2006-06-05 15:04:00) [5]Dmitrij_K
спасибо, не подскажешь как правильно использовать твой проект
пока пробовал AddThread.IdHTTP.Get(' http://...);
но форма при этом зависает
и откуда брать статистику сколько скачалось
и еще ошибку выдает в Utread.pas на
FIdHTTP.ConnectTimeout := 60000;
Dmitrij_K (2006-06-05 13:42:00) [6]http://up-file.com/download/b97cfd815613/Multi-Thread.rar.html
learner (2006-06-05 13:25:00) [7]Dmitrij_K (05.06.06 12:37) [1]
А мне не могг бы отправить ? Спасибо.
Dmitrij_K (2006-06-05 12:37:00) [8]Отправил на твою почту тестовый проект. Пробуй