Zeitdifferenz berechnen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Alci
Beiträge: 29
Registriert: Mi 27. Mai 2009, 08:48
OS, Lazarus, FPC: Linux (L 0.9.26.2-0 FPC 2.2.2)
CPU-Target: 32Bit

Zeitdifferenz berechnen

Beitrag von Alci »

Liebe Forenuser!

Ich habe verschiedene Sortieralgorithmen programmiert und nun möchte ich nach Vergleich der Komplexität, gerne die arbeitende Rechendauer ausrechnen. Ich habe schon Ansätze programmiert doch leider funktioniert es nicht so, wie ich es will. Meine Gedanken:
  • Zuerst wird die Zeit1 mit "Time" gespeichert
  • Danach wird der Sortieralgorithmus ausgeführt
  • Nun wird wieder eine Zeit2 mit "Time" gespeichert
  • Die Differenz aus Zeit2 und Zeit1 wird gebildet und ausgegeben
Leider habe ich vergeblich versucht, alles in Millisekunden auszugeben.
Ich habe folgende Sachen versucht:

Code: Alles auswählen

FormatDateTime('hh:nn:ss.zzz', Now)

Welche Dateitypen müssen die verschieden Variablen haben?

Code: Alles auswählen

Zeit1, Zeit2 : TDateTime;
Diff : real;

Ich hoffe mir kann jemand weiterhelfen. :)

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Zeitdifferenz berechnen

Beitrag von marcov »

Alle TDateTime, und dann diff:=time2-time1; ms:=round(diff*86400000); // 86400000 weil es 24*60*60*1000 ms in einem Tag gibt.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Zeitdifferenz berechnen

Beitrag von monta »

Alternativ kannst du auch einfach mit GetTickCount die aktuelle Zeit in ms angeben lassen (integer) und daraus die Differenz bilden, ähnlich wie bspw. in diesem Beispiel:
viewtopic.php?p=10536#p10536
Johannes

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Zeitdifferenz berechnen

Beitrag von Jochen »

Hi,

schau mal hier:

http://delphi.about.com/od/windowsshellapi/a/delphi-high-performance-timer-tstopwatch.htm

Dort ist alles schön erklärt, den Code kann man direkt in Lazarus verwenden. Ich habs einfach in eine Unit gepackt. Funktioniert wunderbar!


Jochen

TStopwatch.pas
TStopWatch von delphi.about.com
(2.66 KiB) 95-mal heruntergeladen

Alci
Beiträge: 29
Registriert: Mi 27. Mai 2009, 08:48
OS, Lazarus, FPC: Linux (L 0.9.26.2-0 FPC 2.2.2)
CPU-Target: 32Bit

Re: Zeitdifferenz berechnen

Beitrag von Alci »

@marcov,
leider funktioniert es nicht so, denn die Zeit wird nicht in Millisekunden ausgegeben sondern als Uhrzeit 00:00:00. :(

@Jochen,
ich kriege beim Kompilieren immer die Fehlermeldung, dass der identifier TStopWatch nicht bekannt ist, ich habe aber Stopwatch.pas in das Projekt eingefügt. :(

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeitdifferenz berechnen

Beitrag von theo »

Das einfachste ist Montas Vorschlag:

Code: Alles auswählen

uses LCLIntf
....
var Tick:Cardinal;
...
Tick:=GetTickCount;
 
//Tu was
 
Caption:=inttostr(GetTickCount-Tick);

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeitdifferenz berechnen

Beitrag von theo »

Jochen hat geschrieben:TStopwatch.pas

Hier stimmen Unit- und Dateinamen nicht überein.

Alci
Beiträge: 29
Registriert: Mi 27. Mai 2009, 08:48
OS, Lazarus, FPC: Linux (L 0.9.26.2-0 FPC 2.2.2)
CPU-Target: 32Bit

Re: Zeitdifferenz berechnen

Beitrag von Alci »

theo hat geschrieben:Das einfachste ist Montas Vorschlag:

Code: Alles auswählen

uses LCLIntf
....
var Tick:Cardinal;
...
Tick:=GetTickCount;
 
//Tu was
 
Caption:=inttostr(GetTickCount-Tick);

Danke es hat so funktioniert, und danke an Monta :)

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Zeitdifferenz berechnen

Beitrag von Jochen »

theo hat geschrieben:
Jochen hat geschrieben:TStopwatch.pas

Hier stimmen Unit- und Dateinamen nicht überein.


... ähm, das führt zu einem Fehler, tschuldigung! Die Unit soll natürlich Stopwatch.pas heißen.

Theos/Montas Vorschlag ist viel einfacher und eleganter. Werde ich in Zukunft für Vergleiche zwischen Routinen auch benutzen. Danke!


Jochen

Alci
Beiträge: 29
Registriert: Mi 27. Mai 2009, 08:48
OS, Lazarus, FPC: Linux (L 0.9.26.2-0 FPC 2.2.2)
CPU-Target: 32Bit

Re: Zeitdifferenz berechnen

Beitrag von Alci »

Nochmal zu GetTickCount. :) Leider sind meine Sortieralgorithmen so schnell, dass nur 0-1 ms als Ergebnis rauskommen. Kann man es nicht noch präziser errechnen??

EDIT: Ich habe jetzt EpikTimer gefunden, der berechnet alles noch genauer. :)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeitdifferenz berechnen

Beitrag von af0815 »

[quote="Alci"]Nochmal zu GetTickCount. :) Leider sind meine Sortieralgorithmen so schnell, dass nur 0-1 ms als Ergebnis rauskommen. Kann man es nicht noch präziser errechnen?[\quote]Ev. mehr Schleifendurchläufe verwenden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten