Und das hier funktioniert nicht?
Delphi-Quellcode:
Function ElapsedTicks (previousTicks : Cardinal) : Cardinal;
Var
currentTicks : Cardinal;
Begin
currentTicks := GetTickCount();
if currentTicks < previousTicks then
result := High(Cardinal) - previousTicks + currentTicks + 1
else
result := currentTicks - previousTicks
end;
Var
start : Cardinal;
...
begin
start := GetTickCount;
SomeOperation();
Writeln('Tics elapsed:',ElapsedTicks(start));
Wenn man die Überlaufprüfung ausschaltet dann ist
result := High(Cardinal) - previousTicks + currentTicks + 1
equivalent zu
result := High(Cardinal) + 1 - previousTicks + currentTicks
equivalent zu
result := 0 - previousTicks + currentTicks
equivalent zu
result := currentTicks - previousTicks.
Die Fallunterscheidung ist dann also unnötig.