Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Unterschied TStopwatch.Elapsed.Milliseconds und TStopwatch.ElapsedMilliseconds (https://www.delphipraxis.net/211941-unterschied-tstopwatch-elapsed-milliseconds-und-tstopwatch-elapsedmilliseconds.html)

TurboMagic 24. Nov 2022 14:58

Unterschied TStopwatch.Elapsed.Milliseconds und TStopwatch.ElapsedMilliseconds
 
Hallo,

in einem D10.4.2 Programm liefern TStopwatch.Elapsed.Milliseconds und
TStopwatch.ElapsedMilliseconds an der selben Stelle im Programm unterschiedliche Werte.

Wenn man da rein schaut, läuft in der RTL auch untershciedlcher Code, aber sollten die
nicht eigentlich von der Definition her dasselbe liefern?

Grüße
TurboMagic

Rollo62 24. Nov 2022 17:07

AW: Unterschied TStopwatch.Elapsed.Milliseconds und TStopwatch.ElapsedMilliseconds
 
Interessant, ist mir noch nie aufgefallen, ich habe immer ElapsedMilliseconds genutzt.
Ich habe hier nur D11, ist aber bestimmt gleich geblieben

Identisch sind die Funktionen nicht, bei (1) ist noch ein mod 1000 drin und gibt anscheinend nur den Rest der Millisekunden vom jeweiligen Zeitobjekt zurück.
Wobei (2) mit ElapsedMilliseconds die kompletten ms zurückgibt, ohne Begrenzung.

Delphi-Quellcode:

(1)
     LStp.Elapsed.Milliseconds;

function TStopwatch.GetElapsed: TTimeSpan;
begin
  Result := TTimeSpan.Create(GetElapsedDateTimeTicks);
end;

function TTimeSpan.GetMilliseconds: Integer;
begin
  Result := Integer((FTicks div TicksPerMillisecond) mod 1000);
end;


(2)
     LStp.ElapsedMilliseconds;

function TStopwatch.GetElapsedMilliseconds: Int64;
begin
  Result := GetElapsedDateTimeTicks div TTimeSpan.TicksPerMillisecond;
end;

  public const
    TicksPerMillisecond = 10000;

function TStopwatch.GetElapsedDateTimeTicks: Int64;
begin
  Result := ElapsedTicks;
  if FIsHighResolution then
    Result := Trunc(Result * TickFrequency);
end;
Wenn Du was Ähnliches haben willst hilft vielleicht das Elapsed.TotalMilliseconds, ist aber dann ein Double.
Delphi-Quellcode:
function TTimeSpan.GetTotalMilliseconds: Double;
begin
  Result := MillisecondsPerTick;
  Result := FTicks * Result;
  if Result > MaxMilliseconds then
    Result := MaxMilliseconds
  else if Result < MinMilliseconds then
    Result := MinMilliseconds;
end;

himitsu 24. Nov 2022 17:21

AW: Unterschied TStopwatch.Elapsed.Milliseconds und TStopwatch.ElapsedMilliseconds
 
Das Eine gibt alle Millisekunden über die gesamte Dauer an (Millisekunden seit)
das Andere den "Millisekunden"-Anteil der Zeitspanne, siehe das mod, neben den Sekunden, Minuten, Stunden (also das zzz aus hh:mm:ss.zzz).


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz