Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > IdHTTP - отменить GET |
Автор: Teran 6.2.2006, 16:28 |
Когда в своей программе вызываю IdHTTP.POST - программа блокируется "думает" А как мне сделать так чтобы можно было отменить прием данных например по кнопке "Отмена" или можно ли както задать максимальное время соединения с сервером? ![]() |
Автор: Snowy 6.2.2006, 16:43 |
Просто прикрути к IdHTTP IdAntiFreeze |
Автор: Teran 6.2.2006, 16:48 |
а можно както прикрутить к нему Progress??? ![]() |
Автор: Snowy 6.2.2006, 17:55 |
OnWorkBegin сообщит тебе сколько байт всего. OnWork сообщит текущее кол-во переданных или принятых байт. OnWorkEnd сообщит, что все готово. |
Автор: Teran 7.2.2006, 15:41 |
Проблема в том что при одиночном вызове idHHTP.GET функции OnWorkBegin и OnWork вызываются по многу раз и здесь не узнаеш сколько всего (в общем за период idHHTP.GET ) принято байт и построить Progress по ним нельзя. |
Автор: Snowy 7.2.2006, 16:34 |
OnWorkBegin вызывается 2 раза: 1-й на отправку, 2-й на прием. А OnWork так и должен вызываться, пока процесс не завершится. Лови только прием, если не шлешь на сервер файлы. |
Автор: Teran 7.2.2006, 17:51 |
Когда выполняю пошагово idHHTP.GET получается: вначале вызвалась IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); где AWorkCountMax=2293 затем сразу же вызлась IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); где AWorkCount=2293 потом опять IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); где AWorkCountMax=1446 за ним - IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); где AWorkCount=1446 и т.д. Постоянно цифры равны! здесь нет сразу общей суммы байт и как приделать Progress Bar непонятно? ![]() |
Автор: Snowy 7.2.2006, 18:12 |
1 раз - это отправка. 2 раз - это прием. А то что сразу - это потому, что размер передаваемых данных меньше буфера TIdHTTP. Поэтому процесс проходит за один проход. Кроме того смотри параметр AWorkMode. Он тебе сообщает что делает - отправляет или принимает. |
Автор: Teran 7.2.2006, 19:34 |
Всервно не пойму как можно вывести ProgressBar если нет общего максимального колличества (Чему приравнивать ProgressBar.Max:=?????????) ![]() и если то как это же можно реализовать ![]() |
Автор: Snowy 7.2.2006, 21:00 | ||
На форме IdHTTP1 и IdAntiFreeze1. У IdHTTP RecvBuferSize = 1 У антифриза OnlyWenIdle = false, IdleTimeOut = 64
|
Автор: Teran 8.2.2006, 11:05 |
За код огромнейшее спасибо ! Но если я поставлю в место 32768 скорость скачивания страницы не упадёт ?? ![]() |
Автор: Snowy 8.2.2006, 11:08 |
Конечно упадет. В среднем процентов на 40. Для модема на 10, для 100Мбит в 2 раза. Зато ты успеешь заметить как она скачивается ![]() |
Автор: Snowy 30.8.2006, 11:12 |
А, забыл сказать, если попадутся редиректы, то бегунок может бегать несколько раз. Тут ничего не поделаешь - один файл - один пробег. Несколько файлов - несколько пробегов. Будут проблемы - кричите. Просто на моих 100Мбитах инета бегунок пролетает в момент. Поэтому возможны глюки, которых я просто не успеваю увидеть за долю секунды. Хотя вряд ли. Буфер подстраивается под размер файла - на маленьких файлах скорость скачивания замедляется - чтобы бегунок пробегал, а не моргнул, на средних - скорость повышается. На больших - включается максимум. |
Автор: Matematik 30.8.2006, 14:16 |
Кстати на счет первого вопроса. Как правильно отменить процесс скачивания? Сейчас я в onWork проверяю условие и делаю DisconnectSocket. Может есть более цивилизованный способ? |
Автор: Zlo 6.11.2006, 02:04 | ||
понял =)
(иногда хелп всетаки помогает) Тока вот у меня вопрос, а как это событие отловить в потоке (трейде) где компонент создан? |
Автор: Matematik 6.11.2006, 09:43 | ||
Ты сомневался? ![]()
![]() |
Автор: Zlo 6.11.2006, 16:10 | ||
Matematik, извини но че-то у меня не получилось так как ты показал. Я решил сделать по своему вот так:
Помоги пожалуйста! |
Автор: Matematik 6.11.2006, 16:32 |
Событие забыл установить |
Автор: Zlo 6.11.2006, 16:40 |
а как и где его установить? |
Автор: Matematik 6.11.2006, 16:50 |
Так написал уже FIdHTTP.OnWork := WorkEventProc; |
Автор: Zlo 6.11.2006, 16:55 | ||
Matematik, дык если вставляю
Код не компилится, ругается что нету: -Create -IdHTTP1 -IdHTTP1Work |
Автор: MacTep 4.2.2007, 12:14 |
А трафик можно узнать в мегабайтах или килобайтах, входящий или исходящий, отправленный или полученные методами get и post? |
Автор: Matematik 4.2.2007, 14:28 | ||
Да. Например. Для 9 подсоедини к IdHTTP TIdLogEvent с вкладки "Indy Intercents", в событиях он Send\Receive считать переданные байты. В 10 такой способ немного сложней, нельзя напрямую соединить IdHTTP TIdLogEvent нужен дополнительный компонент для их связи (не помню какой). ЗЫ лучше бы новую тему создал |