Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.031 c
3-1086766094
Роман
2004-06-09 11:28
2004.07.04
Lookup поля в runtime


14-1087193128
Rule
2004-06-14 10:05
2004.07.04
Как Вы относитесь к максималистам ... ?


14-1087377955
Adventure
2004-06-16 13:25
2004.07.04
Должность: программист


8-1082305824
ARY
2004-04-18 20:30
2004.07.04
Анимация велосипеда.


1-1087460056
Глеб
2004-06-17 12:14
2004.07.04
Как мне программно поменять раскладку клавиатуры?




   Наверх