Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Разделить размер файла на части и закачать. (https://forum.antichat.xyz/showthread.php?t=172622)

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;



Время: 14:36