unit aps_timer;
interface
uses Windows, SysUtils;
type
TAPS_Timer = class(TObject)
private
// Speichert die Zeit per GetTickCount
fStart_Timer : LongWord;
fStop_Timer : LongWord;
// Zeit die seit Start vergangen ist
fSart__Ver : LongWord;
fPos : Integer; // Position in der Liste
fAktSek : Integer; // Speichert die aktuelle Anzahl an Sec. die noch gebraucht wird für die Liste
fIdle : Integer; // Sekunden die noch für die Fertigstellung benötigt wird
// Rechnet die Millisekunden in Sekunden (Rückgabewert) um
function msToSec(msValue: LongWord): Integer;
// Wandelt "Seconds" in String um - Format = hh:mm:ss
// Erwartet in Seconds die Übergabe in Sekunden
function SecToTime(Seconds: Longword): String;
// Gibt die aktuelle Zeit die vergangen ist als Integer wieder
function CurrentTimeInt: Integer;
public
Max : Integer; // Anzahl der Einträge der durch zu suchenden TGP-Seiten
// Ausgabe der Restzeit als String
function GetRestTime: string;
// Gibt die aktuelle Zeit die vergangen seit Start des "Grabbens"
// als String wieder
function CurrentTimeStr: string;
// Startet den Timer
procedure Start;
// Springt zur nächsten Position in der Liste und berechnet die Neue
procedure NextPos;
procedure StartTimer;
procedure StopTimer;
// Gibt die aktuelle Position in der Liste der abzufragenden
URL's zurück
function GetPos: Integer;
// Erzeugen und Zerstören des Objektes
constructor Create;
destructor Destroy; override;
end;
implementation
procedure TAPS_Timer.StopTimer;
begin
fStop_Timer:= GetTickCount;
end;
//-------------------------------------------------------------------------
procedure TAPS_Timer.StartTimer;
begin
fStart_Timer:= GetTickCount;
end;
//-------------------------------------------------------------------------
function TAPS_Timer.CurrentTimeInt: Integer;
Var tmp: Integer;
begin
tmp:= Round((GetTickCount - fSart__Ver) / 1000);
Result:=tmp;
end;
//-------------------------------------------------------------------------
function TAPS_Timer.CurrentTimeStr: string;
Var tmp: Integer;
begin
tmp:= Round((GetTickCount - fSart__Ver) / 1000);
Result:=SecToTime(tmp);
end;
//-------------------------------------------------------------------------
function TAPS_Timer.GetPos: Integer;
begin
Result:= fPos;
end;
//-------------------------------------------------------------------------
procedure TAPS_Timer.Start;
begin
// Zeit seit Beginn festhalten
fSart__Ver:= GetTickCount;
// Position in der Liste auf Anfang setzen
fPos:=1;
// Variable für aktuelle Sekunden auf null setzen
fAktSek:=0; fIdle:=0;
end;
//-------------------------------------------------------------------------
procedure TAPS_Timer.NextPos;
begin
Inc(fPos);
fIdle:= fidle+(msToSec(fStop_Timer - fStart_Timer) div fpos);
end;
//-------------------------------------------------------------------------
function TAPS_Timer.GetRestTime: string;
begin
fAktSek:= fidle * (Max - fpos);
result:=SecToTime(fAktSek);
end;
//-------------------------------------------------------------------------
function TAPS_Timer.SecToTime(Seconds: Longword): String;
Var
rest, xx, hh, mm, ss: integer;
thh, tmm, tss: string;
begin
xx:=seconds;
hh:= xx div 3600; // 1 Stunde = 3600 Sekunden
rest:=xx mod 3600; // Rest = Überbleibende Sekunden
xx:=rest;
mm:= xx div 60; // 1 Minute = 60 Sekunden
rest:=xx mod 60; // Rest = Überbleibende Sekunden
ss:=rest;
if hh < 10 then thh:='0'+IntToStr(hh)
else thh:= IntToStr(hh);
if mm < 10 then tmm:='0'+IntToStr(mm)
else tmm:= IntToStr(mm);
if ss < 10 then tss:='0'+IntToStr(ss)
else tss:= IntToStr(ss);
result:=thh+':'+tmm+':'+tss;
end;
//-------------------------------------------------------------------------
function TAPS_Timer.msToSec(msValue: LongWord): Integer;
begin
Result:= Round(msValue / 1000);
end;
//-------------------------------------------------------------------------
constructor TAPS_Timer.Create;
begin
// Als erstes kommt das geerbte Create !
inherited Create;
end;
//-------------------------------------------------------------------------
destructor TAPS_Timer.Destroy;
begin
// Als letztes kommt das geerbte Destroy !
inherited Destroy;
end;
end.