Разделить размер файла на части и закачать.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by RedFern.89, 22 Jan 2010.

  1. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    557
    Likes Received:
    45
    Reputations:
    0
    все вроде бы получилось. Делал так:

    Code:
    
    [b]type[/b] TApiGetHTTP = [b]class[/b](TTharead)
    
    ....
    
    [b]var[/b]
     HTTP : [b]array of[/b] TApiGetHTTP;
    
    [b]var[/b]
      ContentLength: Int64;
      Offset, Chunk : Int64;
      RangeBegin, RangeEnd : Int64;
      PartCount : Cardinal;
      I : Integer;
    [b]begin[/b]
      ContentLength := GetUrlFileSize(AURL);
      PartCount := 5;
      
      Chunk := ContentLength [b]div[/b] PartCount;
      Offset := 0;
      
      [b]For[/b] I := 0 [b]To[/b] PartCount -1 [b]do[/b]
      [b]begin[/b]
         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);
      [b]end;[/b]
    
      [b]For[/b] I := 0 [b]To[/b] Length(http) -1 [b]do[/b] HTTP[i].Resume;
    
    все работает прекрасно но 1 баг! Следующий поток не начнется, пока не завершит работу другой! в чем же дело? что я делаю не так? спасибо заранее..
     
    #1 RedFern.89, 22 Jan 2010
    Last edited: 22 Jan 2010
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Попробуй так:
    Code:
    
    [b]type[/b] TApiGetHTTP = [b]class[/b](TTharead)
    
    ....
    
    [b]var[/b]
     HTTP : [b]array of[/b] TApiGetHTTP;
    
    [b]var[/b]
      ContentLength: Int64;
      Offset, Chunk : Int64;
      RangeBegin, RangeEnd : Int64;
      PartCount : Cardinal;
      I : Integer;
    [b]begin[/b]
      ContentLength := GetUrlFileSize(AURL);
      PartCount := 5;
      
      Chunk := ContentLength [b]div[/b] PartCount;
      Offset := 0;
      
      [b]For[/b] I := 0 [b]To[/b] PartCount -1 [b]do[/b]
      [b]begin[/b]
         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);
      [b]end;[/b]
    
      [b]For[/b] I := 0 [b]To[/b] [b]PartCount - 1[/b] [b]do[/b] HTTP[i].Resume;