Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> IdHTTP - отменить GET, во время приема 
:(
    Опции темы
Teran
  Дата 6.2.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Когда в своей программе вызываю IdHTTP.POST - программа блокируется "думает"

А как мне сделать так чтобы можно было отменить прием данных например по кнопке "Отмена"
или можно ли както задать максимальное время соединения с сервером? smile


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 6.2.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Просто прикрути к IdHTTP IdAntiFreeze
PM MAIL   Вверх
Teran
Дата 6.2.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



а можно както прикрутить к нему Progress??? smile


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 6.2.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



OnWorkBegin сообщит тебе сколько байт всего.
OnWork сообщит текущее кол-во переданных или принятых байт.
OnWorkEnd сообщит, что все готово.
PM MAIL   Вверх
Teran
Дата 7.2.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Проблема в том что при одиночном вызове idHHTP.GET функции OnWorkBegin и OnWork вызываются по многу раз

и здесь не узнаеш сколько всего (в общем за период idHHTP.GET ) принято байт
и построить Progress по ним нельзя.


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 7.2.2006, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



OnWorkBegin вызывается 2 раза:
1-й на отправку, 2-й на прием.
А OnWork так и должен вызываться, пока процесс не завершится.
Лови только прием, если не шлешь на сервер файлы.
PM MAIL   Вверх
Teran
Дата 7.2.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Когда выполняю пошагово 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 непонятно? smile




--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 7.2.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



1 раз - это отправка.
2 раз - это прием.
А то что сразу - это потому, что размер передаваемых данных меньше буфера TIdHTTP.
Поэтому процесс проходит за один проход.
Кроме того смотри параметр AWorkMode. Он тебе сообщает что делает - отправляет или принимает.
PM MAIL   Вверх
Teran
Дата 7.2.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Всервно не пойму как можно вывести ProgressBar если нет общего максимального колличества

(Чему приравнивать ProgressBar.Max:=?????????) smile

и если
Цитата(Snowy @ 7.2.2006, 18:12 Найти цитируемый пост)

Поэтому процесс проходит за один проход.

то как это же можно реализовать smile


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 7.2.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



На форме IdHTTP1 и IdAntiFreeze1.
У IdHTTP RecvBuferSize = 1
У антифриза OnlyWenIdle = false, IdleTimeOut = 64
Код

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  if AWorkMode = wmRead then ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  if AWorkMode = wmRead then ProgressBar1.Max := AWorkCountMax;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
   s := IdHttp1.Get('http://www.vingrad.ru/');
   ShowMessage(s);
end;

PM MAIL   Вверх
Teran
Дата 8.2.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



За код огромнейшее спасибо !
Но если я поставлю
Цитата(Snowy @ 7.2.2006, 21:00 Найти цитируемый пост)

У IdHTTP RecvBuferSize = 1

в место 32768
скорость скачивания страницы не упадёт ?? smile


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 8.2.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Конечно упадет. В среднем процентов на 40.
Для модема на 10, для 100Мбит в 2 раза.
Зато ты успеешь заметить как она скачивается smile
PM MAIL   Вверх
Snowy
Дата 30.8.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



А, забыл сказать, если попадутся редиректы, то бегунок может бегать несколько раз.
Тут ничего не поделаешь - один файл - один пробег. Несколько файлов - несколько пробегов.
Будут проблемы - кричите.
Просто на моих 100Мбитах инета бегунок пролетает в момент. Поэтому возможны глюки, которых я просто не успеваю увидеть за долю секунды. Хотя вряд ли.

Буфер подстраивается под размер файла - на маленьких файлах скорость скачивания замедляется - чтобы бегунок пробегал, а не моргнул,
на средних - скорость повышается. На больших - включается максимум.

Присоединённый файл ( Кол-во скачиваний: 103 )
Присоединённый файл  HttpDLProgress.zip 2,19 Kb
PM MAIL   Вверх
Matematik
Дата 30.8.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Кстати на счет первого вопроса.
Как правильно отменить процесс скачивания? Сейчас я в onWork проверяю условие и делаю DisconnectSocket. Может есть более цивилизованный способ?
PM MAIL WWW ICQ   Вверх
Zlo
Дата 6.11.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: нет
Всего: 1



Цитата(Snowy @  7.2.2006,  18:12 Найти цитируемый пост)
1 раз - это отправка.
2 раз - это прием.
А то что сразу - это потому, что размер передаваемых данных меньше буфера TIdHTTP.
Поэтому процесс проходит за один проход.
Кроме того смотри параметр AWorkMode. Он тебе сообщает что делает - отправляет или принимает. 

А как узнать какое значение у AWorkMode?
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0882 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.