Einzelnen Beitrag anzeigen

Benutzerbild von CK_CK
CK_CK

Registriert seit: 30. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: IdFTP -> Downloadgeschwindigkeit begrenzen (Indy 10)

  Alt 23. Feb 2007, 19:37
Da war ein ganz großer Denkfehler drinnen...

Für alle, die auch mal sowas machen wollen kommt hier der berichtigte Code:
Interface:
Delphi-Quellcode:
type
  TSpeedLimitedStream = class(TFileStream)
  private
    fMaxSpeed: Cardinal;
    fLastTick: Cardinal;

    function NewDataAllowed(Count: Longint): Boolean;
  public
    function Write(const Buffer; Count: Longint): Longint; override;

    property MaxSpeed: Cardinal read fMaxSpeed write fMaxSpeed default 0;
  end;
Implementation:
Delphi-Quellcode:
function TSpeedLimitedStream.NewDataAllowed(Count: Integer): Boolean;
var
  tmp: Cardinal;
begin
  tmp := GetTickCount-fLastTick;
  if tmp = 0 then tmp := 1;
  Result := Count/tmp <= fMaxSpeed;
end;

function TSpeedLimitedStream.Write(const Buffer; Count: Longint): Longint;
begin
  if fMaxSpeed > 0 then
    while not NewDataAllowed(Count) do
      Sleep(1);
  fLastTick := GetTickCount;

  Result := inherited Write(Buffer, Count);
end;
So funktioniert das perfekt! Vielen Dank nochmal an SirThornberry!

Einen schönen Abend noch,
Chris
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat