Замучался я с этим потоком, совсем запутался, прочитал уже кучу литературы, но что то не могу понять как он работает. В потоке осуществляю закачку файла с докачкой, код такой
- Код: Выделить всё
procedure TGetThread.Execute;
var
RestartPos: DWORD; //позиция с которой начинается докачка
begin
try
try
//инициализация переменных
RestartPos := 0;
//Если на винте есть файл то считаем, что нужно докачивать
if FileExists(файл_в_который_сохраняем) then
begin
rcvrdata:=TFileStream.Create(файл_в_который_сохраняем,fmOpenReadWrite,fmShareExclusive);
rcvrdata.Seek(FileSize(файл_в_который_сохраняем),soBeginning);
RestartPos := FileSize(файл_в_который_сохраняем);
end
else
begin
rcvrdata:=TFileStream.Create(файл_в_который_сохраняем,fmCreate,fmShareExclusive);
end;
//устанавливаем позицию в файле для докачки
if RestartPos > 0 then begin
MainForm.idHttp1.Request.ContentRangeStart:=RestartPos;
end;
//загрузка файла
MainForm.idHttp1.Get(URL_скачиваемого_файла, rcvrdata);
except
//обработка ошибок
end;
finally
rcvrdata.Free;
end;
end;
программа качает только один блок и останавливается, т.е. получается как бы выполняется один проход и всё, пытался использовать конструкцию repeat until Terminated, вроде работает как надо, но не происходит остановки после окончания размера файла, который я получаю по Response.ContentLength, т.е. получается проблема с докачкой файла, причём после превышения размера файла на сервере программа продолжает что то писать в файловый поток, и компонент idHTTP показывает что AWorkCount в событии IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64) не равен нулю.
Объясните пожалуйста мне дураку почему
1) не выполняется полная закачка файла в потоке, почему нужно использовать repeat?
2) не работает докачка файла, точнее программа продолжает что то писать в файловый поток, либо как остановить скачку при окончании файла?
3) что нужно использовать при установке позиции в скачиваемом файле Request или Response? правильно ли я делаю докачку файла?
P.S. пересмотрел кучу вариантов реализации данной функции (скачка с докачиванием файла), не хватает маргарина в голове, сильно не ругайте за кучу вопросов не по теме
Добавлено спустя 26 минут 24 секунды:Забыл добавить, что поставив данный код на нажатие кнопки, а не в поток, закачка файла происходит до конца (без использования докачки), в потоке же нет