Einzelnen Beitrag anzeigen

Benutzerbild von CK_CK
CK_CK

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

Re: IdFTP -> Downloadgeschwindigkeit begrenzen (Indy 10)

  Alt 23. Feb 2007, 18:22
Ich hab' das so mal probiert, aber irgendwie funktioniert es nicht.
Ich bekomme immer eine AV "Ungültige Gleitkommaoperation"...

Mein Code sieht so aus:
Delphi-Quellcode:
type
  TSpeedLimitedStream = class(TFileStream)
  private
    fMaxSpeed: Cardinal;
    fLastTick: Cardinal;
    fLastCount: Integer;

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

    property MaxSpeed: Cardinal read fMaxSpeed write fMaxSpeed default 0;
  end;
Implementiert habe ich die Methoden so:
Delphi-Quellcode:
function TSpeedLimitedStream.NewDataAllowed(Count: Integer): Boolean;
var
  curTick: Cardinal;
  curCount: Integer;
begin
  if fMaxSpeed = 0 then
  begin
    Result := True;
  end else begin
    curTick := GetTickCount;
    curCount := Count;

    if (curCount-fLastCount)/((curTick-fLastTick)/1000) <= fMaxSpeed then
      Result := False
    else
      Result := True;

    fLastTick := GetTickCount;
    fLastCount := Count;
  end;
end;

function TSpeedLimitedStream.Write(const Buffer; Count: Integer): Longint;
begin
  while not NewDataAllowed(Count) do
    Sleep(10);

  inherited Write(Buffer, Count);
end;
Ich benutze diesen Stream ganz normal für's downloaden, also IdFTP.Get('Dateiname', MyStream);, wobei MyStream vom Typ TSpeedLimitedStream ist und MaxSpeed auf 50 gesetzt ist...

Erkennt jemand daran einen Fehler?

Chris
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat