PDA

Просмотр полной версии : Разделить размер файла на части и закачать.


RedFern.89
22.01.2010, 11:31
все вроде бы получилось. Делал так:



type TApiGetHTTP = class(TTharead)

....

var
HTTP : array of TApiGetHTTP;

var
ContentLength: Int64;
Offset, Chunk : Int64;
RangeBegin, RangeEnd : Int64;
PartCount : Cardinal;
I : Integer;
begin
ContentLength := GetUrlFileSize(AURL);
PartCount := 5;

Chunk := ContentLength div PartCount;
Offset := 0;

For I := 0 To PartCount -1 do
begin
SetLength(http, i+1);
RangeBegin := Offset;
RangeEnd := Offset + Chunk;
Offset := Offset + Chunk +1;
HTTP[I] := TApiGetHTTP.Create(True);
HTTP[i].Suspend;
HTTP[i].RangeBegin := IntToStr(RangeBegin);
HTTP[i].RangeEnd := IntToStr(RangeEnd);
end;

For I := 0 To Length(http) -1 do HTTP[i].Resume;


все работает прекрасно но 1 баг! Следующий поток не начнется, пока не завершит работу другой! в чем же дело? что я делаю не так? спасибо заранее..

Chrome~
22.01.2010, 19:11
Попробуй так:


type TApiGetHTTP = class(TTharead)

....

var
HTTP : array of TApiGetHTTP;

var
ContentLength: Int64;
Offset, Chunk : Int64;
RangeBegin, RangeEnd : Int64;
PartCount : Cardinal;
I : Integer;
begin
ContentLength := GetUrlFileSize(AURL);
PartCount := 5;

Chunk := ContentLength div PartCount;
Offset := 0;

For I := 0 To PartCount -1 do
begin
SetLength(http, i+1);
RangeBegin := Offset;
RangeEnd := Offset + Chunk;
Offset := Offset + Chunk +1;
HTTP[I] := TApiGetHTTP.Create(True);
// HTTP[i].Suspend;
HTTP[i].RangeBegin := IntToStr(RangeBegin);
HTTP[i].RangeEnd := IntToStr(RangeEnd);
end;

For I := 0 To PartCount - 1 do HTTP[i].Resume;