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