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