Главная страница
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.021 c
14-1087266575
Думкин
2004-06-15 06:29
2004.07.04
С днем рождения! 15 июня


1-1087255908
Dmitry
2004-06-15 03:31
2004.07.04
Необходимо сделать объект прозрачным для событий.


11-1076172623
RA2
2004-02-07 19:50
2004.07.04
KOLRichEdit;


1-1087887519
Tom
2004-06-22 10:58
2004.07.04
Надо загрузить функцию из DLL написанной на C...


8-1082548854
xman
2004-04-21 16:00
2004.07.04
SPEECH.PAS