Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeit messen & Programm abrechen (https://www.delphipraxis.net/10428-zeit-messen-programm-abrechen.html)

nothin 18. Okt 2003 14:00


Zeit messen & Programm abrechen
 
Sers Leute,

bin ein ziemlicher Anfänger und hab zwei Fragen an Euch:

1. Wie errechne ich die Zeit, die eine Prozedur für das Ausführen eines Codes braucht? Ich "programmiere" zur Zeit ein Programm, das mit Hilfe von Bubblesort, Zahlen sortiert. Ich möchte auf der Oberfläche meines Programms eine Art Stopuhr (die anzeigt wie Lange das Programm schon arbeitet) anzeigen. Wie stelle ich das an? Beispiele?
2. Ich möchte in mein Bubblesort einen Abbruchknopf einbauen. Wenn die Sortierung mit Bubblesort zu lange dauert, möchte ich, dass der Benutzer die Möglichkeit hat den Vorgang abzubrechen.
Hab's schon versucht, aber sol lange das Progamm rechnet kann man bei mir keine Buttons klicken :|
Wie stelle ich das an? Beispielcode?

Luckie 18. Okt 2003 14:14

Re: Zeit messen & Programm abrechen
 
In die Schleife Application.Processmessages rein.

Das mit der Zeit wird schwierig - für dich, wenn du es richtig machen willst. Einfach und ungenau wird es mit GetTickCount. Die Forensuche sollte helfen.

nothin 18. Okt 2003 14:19

Re: Zeit messen & Programm abrechen
 
Ist es egal wo in der Schleife Application.Processmessages rein muss?
Was für Code muss bei so einem Abrruchbutton rein?

Luckie 18. Okt 2003 14:21

Re: Zeit messen & Programm abrechen
 
Nimm eine bool'sche Variable (global) die du in der Schleife abfragst und mit einem Button entsprechend setzt.

himitsu 18. Okt 2003 14:59

Re: Zeit messen & Programm abrechen
 
Delphi-Quellcode:
Var Beenden: Boolean;

Procedure ...;
Var Start: TDateTime;
{Z: Byte;}
Begin
  Beenden := False;
  Start := now;
  Repeat
    ...
    Label1.Caption := TimeToStr(Now - StartZeit);
    {Inc(Z);} 
    {If Z mod 32 = 0 Then} Application.ProcessMessages;
  Until Beenden or (fertig);
  Label1.Caption := 'fertig / abgebrochen';
End;

Procedure Form1.ButtonClick(Sender: TObject);
Begin
  Beenden := True;
End;

Achtung: je häufiger ProcessMessages aufgerufen wird, desto länger baucht dein Programm.
Notfalls einen Zähler einbauen und nur bei jedem X-ten Durchlauf aufrufen.
Im Beispiel bieten sich Potenzen von 2 für X(32) an.

Jelly 18. Okt 2003 15:10

Re: Zeit messen & Programm abrechen
 
Kuck dir doch mal im Demos/Threads Verzeichnis von Delphi das Programm Thrddemo an. Erklärt einerseits genau die Lösung zu deinem Problem mittels Threads und zeigt andererseits auch noch genau passend die Threads eingesetzt bei einem Sortierverfahrenvergleich.

Gruß,
Tom

APP 18. Okt 2003 15:26

Re: Zeit messen & Programm abrechen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
zur genauen Zeitmessung habe ich eine Unit von
Peter J. Haas & Robert Rossmair auf meiner Platte
herumliegen, leider finde ich den Link nicht mehr.
(Lizenz der Unit ist MPL)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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