Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

Как остановить посылку Get в TidHTTP ?   Найти похожие ветки 

 
GreySerg   (2004-05-12 15:33) [0]

Имеется thread, в методе execute которого делаю

Browser := TIdHTTP.Create(nil);
................................
Browser.Get(ResourceName,fStream);

я хочу остановить Get , но чтобы он останавливал посылку не после Browser.ReadTimeout, а сразу

Пробовал 2 способа:
1 способ :
  Делаю thread.terminate
  а в событии OnStatus отслеживаю:

  Browser.OnStatus := BrowserCheckStatus;

procedure TDownloadThread.BrowserCheckStatus(ASender: TObject;
 const AStatus: TIdStatus; const AStatusText: string);
begin
 if Terminated then
   Browser.DisconnectSocket;
end;

Но в OnStatus  заходит только если меняется состояние, а мне надо  прервать не только когда меняется состояние.

Terminated проверяю также и в Browser.OnWorkBegin, Browser.OnWork ,Browser.OnWorkEnd.

2 способ:
Делать TerminateThread(DThread.Handle,0)

но тогда  надо заботится об освобождении fStream, иначе будет ошибка , если мы повторно сделаем
fStream:=TFileStream.Create(ExtractFileName(UnixPathToDosPath(ResourceName)),fmOpenReadWrite or fmShareDenyWrite);
Browser.Get(ResourceName,fStream);

Мастера подскажите пожалуйста, может есть альтернативный способ ?

Жду ответа.


 
Digitman ©   (2004-05-12 16:00) [1]


> GreySerg


TIdHTTP.Get() - блокирующий метод, целиком и полностью зависящий от состояния транспорта

под транспортом здесь можно понимать состояние "законнекченности" гнезда, через которое компонент осуществляет связь с сервером

достаточно в ином другом код.потоке закрыть гнездо, и метод TIdHTTP.Get() тут же вернет управление (или возбудит искл-е - утверждать не возьмусь)


 
GreySerg   (2004-05-12 16:10) [2]

>  Digitman ©  

то есть достаточно создать поток , который закрывает гнездо (socket), а как узнать какое гнездо закрывать и как его закрывать ?


 
GreySerg   (2004-05-12 16:45) [3]

> Digitman

Спасибо, сам разобрался :-)

А теперь подскажите пожалуйста, почему при скачивании некоторых файлов, idHTTP неправильно возвращает заголовки:

Вот этот код в модуле idHTTPHeaderInfo:

RangeDecode := Values["Content-Range"]; {do not localize}
   if RangeDecode <> "" then
   begin
     Fetch(RangeDecode);
     FContentRangeStart := StrToInt(Fetch(RangeDecode,"-"));
     FContentRangeEnd := StrToInt(Fetch(RangeDecode,"/"));
   end;

возвращает в RangeDecode в моём случае bytes */72704
И StrToInt вызовет exception

а в других случаях  RangeDecode возвращает bytes 1942-752639/752640

Что за Values["Content-Range"] и как с ним бороться ?


 
Digitman ©   (2004-05-12 16:55) [4]

а понятия не имею ...
не пользую сабж в принципе ..



Страницы: 1 вся ветка

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
4-1085377436
S@shka
2004-05-24 09:43
2004.07.04
"Подмена" окна внешнего приложения


1-1087552592
Alek
2004-06-18 13:56
2004.07.04
Кодирование ..


4-1082121116
Orion2
2004-04-16 17:11
2004.07.04
RegisterShellHookWindow


1-1087739472
Islander
2004-06-20 17:51
2004.07.04
Как проверить, раскрыто ли PopupMenu или нет?


14-1087149961
default
2004-06-13 22:06
2004.07.04
Задачка