Форум: "Сети";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
ВнизКак остановить посылку 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c