Главная страница
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.035 c
3-1086191903
IVS
2004-06-02 19:58
2004.07.04
Неоправданно вырос файл базы InterBase


1-1087566561
Артем
2004-06-18 17:49
2004.07.04
Вопрос по WebBrowser


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


14-1087139083
Daniel_
2004-06-13 19:04
2004.07.04
Nero burning rom


14-1087046365
juiceman
2004-06-12 17:19
2004.07.04
Вопросы про локальную сеть