AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Downloadgeschwindigkeit drosseln / beschränken
Thema durchsuchen
Ansicht
Themen-Optionen

Downloadgeschwindigkeit drosseln / beschränken

Ein Thema von schismatic1 · begonnen am 27. Mai 2009 · letzter Beitrag vom 30. Mai 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.558 Beiträge
 
Delphi 12 Athens
 
#1

Re: Downloadgeschwindigkeit drosseln / beschränken

  Alt 28. Mai 2009, 10:05
IdHTTP scheint wohl nichts anzubieten, wo man selber stückchenweise in einen Puffer schreiben kann?

bei der Berechnung im Sleep bin ich mir aber nicht sicher
Delphi-Quellcode:
type TForm2 = class(TForm)
    ...
  private
    MaxBytesPerSecond, WorkTime: LongWord;
    CountAtLastWorkEvent: Int64;
    procedure WorkEvent(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
  end;

procedure TForm2.WorkEvent(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
var i: Integer;
begin
  i := (AWorkCount - CountAtLastWorkEvent) * 1000 div (GetTickCount - WorkTime);
  If i > MaxBytesPerSecond Then
    Sleep((GetTickCount - WorkTime) * (i - MaxBytesPerSecond) div MaxBytesPerSecond);
  WorkTime := GetTickCount;
  CountAtLastWorkEvent := AWorkCount;
end;

procedure TForm2.FormCreate(Sender: TObject);
var HTTP: TIdHTTP;
  temp: String;
begin
  HTTP := TIdHTTP.Create;
  try
    HTTP.Request.BasicAuthentication := true;
    HTTP.Request.Username := Username;
    HTTP.Request.Password := Password;
    HTTP.HandleRedirects := true;
    HTTP.OnWork := WorkEvent;
    MaxBytesPerSecond := 1024;
    WorkTime := GetTickCount;
    CountAtLastWorkEvent := 0;
    temp := HTTP.Get(URL);
  finally
    HTTP.Free;
  end;
end;
ansonsten könnte man da auch einfach einen modifizierten TStream-Nachkömmling nehmen, der bremst (Sleep), wenn er zu schnell gefüllt wird ... praktisch das Selber wie hier im Event, nur dort halt im .Write des Streams.

oder eine andere Komponente nehmen

bei direkter Nutzung der WinAPI MSDN-Library durchsuchenInternetReadFile konnte ich sowas über eine passende Puffergröße und eventuell eine Pause nach jedem Aufruf recht leicht lösen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz