Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Организовать в проекте скачивание файлов по принципу работы 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]

Отправил на твою почту тестовый проект. Пробуй


Наверх

Титульная страница Поиск, карта сайта Написать письмо