![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как остановить посылку Get в TidHTTP ? [D7, Win95/98, WinME, NT4, Win2k, WinXP]
GreySerg © (2004-05-12 15:33:00)Имеется 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:55:00) [1]а понятия не имею ...
не пользую сабж в принципе ..
GreySerg (2004-05-12 16:45:00) [2]> 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'] и как с ним бороться ?
GreySerg (2004-05-12 16:10:00) [3]> Digitman ©
то есть достаточно создать поток , который закрывает гнездо (socket), а как узнать какое гнездо закрывать и как его закрывать ?
Digitman (2004-05-12 16:00:00) [4]
> GreySerg
TIdHTTP.Get() - блокирующий метод, целиком и полностью зависящий от состояния транспорта
под транспортом здесь можно понимать состояние "законнекченности" гнезда, через которое компонент осуществляет связь с сервером
достаточно в ином другом код.потоке закрыть гнездо, и метод TIdHTTP.Get() тут же вернет управление (или возбудит искл-е - утверждать не возьмусь)