Ich habe mich schon lange über die Beschränkungen von GetTickCount geärgert ung habe deshalb im Zuge der immer stabiler werdenden Betriebsysteme und der immerwährenden Beschränkung von GetTickCount auf 49,7 Tagemeinen eigenen GetTickCount-Algorithmus entwickelt, GetTickCountEx. Er gibt als Ergebnis ein record vom Typ TUpTime(siehe unten) zurück und sollte sicherheitshalber alle 4294967295 Millisekunden ausgeführt werden, da er sonst falsche Ergebnisse liefert (aber solche Zeitdifferenzen kann ich mir sowieso nicht vorstellen)
(Ms 0 ist Systemstart, 4294967296 ms sind ~ 49,7 Tage).
Hier der Algo:
Delphi-Quellcode:
type
TUpTime = record
MilliSeconds: Word;
Seconds,
Minutes,
Hours,
Days,
Months,
Years : Byte;
end;
var
Ticks: Int64;
TempTicks: Cardinal;
function GetTickCountEx: TUpTime;
var temp: Cardinal;
begin
if Ticks = 0 then
Ticks := GetTickCount
else
begin
temp := TempTicks;
TempTicks := GetTickCount;
if TempTicks < Ticks then
Inc(Ticks, TempTicks - temp)
else
Ticks := TempTicks;
end;
with Result do
begin
MilliSeconds := Ticks mod 1000;
Seconds := (Ticks div 1000) mod 60;
Minutes := (Ticks div 60000) mod 60;
Hours := (Ticks div 3600000) mod 24;
Days := ((Ticks div 3600000) div 24) mod 30;
Months := ((Ticks div 3600000) div 24) div 30;
Years := ((Ticks div 3600000) div 24) div 365;
end;
end;
Anbei noch eine Demo für das Ganze, dann sollten alle zufrieden sein (dass die Exe
nonVCL, hat seine Gründe)
BtW: Dieser Code ist ABSOLUT Freeware. Macht mit ihm, was ihr wollt, aber wenn ihr ihn in euren Programmen nutzt, erwähnt doch bitte in den Credits.