Autor Beitrag
luckyluc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103



BeitragVerfasst: Sa 10.01.09 15:56 
Hallo
Also hab jetzt ein programm welches alle primzahlen bis zu einer gewissen zahl ausgibt. Jetzt möchte ich messen, wie lange der computer dafür benötigt hat (also wie lange er braucht um alle primzahlen anzuzeigen).
ich weiß, dass man dafür gettickcounter oder queryperformancecounter benutzen kann.Ich kenne dies jedoch nicht. könnt ihr mir diese erklären und enen tippgeben wie ich das umzusetzeen habe?
Danke!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.01.09 15:59 
Zu beiden Funktionen solltest du über die Suche Beispiel hier im Forum finden.
luckyluc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103



BeitragVerfasst: Sa 10.01.09 16:07 
also ich finde die bei der suche hier nicht im forum.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.01.09 16:17 
Suche in: Delphi-Forum, Delphi-Library GETTICKCOUNT liefert bei mir über acht Seiten Suchergebnisse. Also wenn da nichts dabei ist...
luckyluc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103



BeitragVerfasst: Sa 10.01.09 16:36 
ja, gut dankeschön.
schleßlich bis du schon länger als ich im forum :wink: und hast bestimmt raus wie man die besten suchergebnisse bekommst.
Dankeschön! :)
luckyluc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103



BeitragVerfasst: Sa 10.01.09 17:29 
Hallo!
kann mir jemand bei meiner bereits oben gestellten frage helfen. denn durch die such- ergebniss erreiche ich keine für mich relevanten beispiele.(zu ungenau, oder nicht im entferntesten mit meinem beispiel zu tun).
Ich hab gar keine ahnung von diesen zwei teilen und benötge daher eine erklärung wie man dies genau anwendet.
Danke!
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 10.01.09 17:47 
GetTickCount:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Zeit: Integer;
begin
  Zeit := GetTickCount;
  // Routine
  Zeit := GetTickCount - Zeit;

Die Funktion GetTickCount ermittelt die seit dem Systemstart vergangene Zeit in Millisekunden.

QueryPerformanceCounter:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var

    t1, t2, freq: Int64;
    res: Extended;
begin
    QueryPerformanceCounter(t1);
    // Routine
    QueryPerformanceCounter(t2);
    QueryPerformanceFrequency(freq);
    res := ((t2 - t1) / freq) * 1000;

QueryPerformanceCounter ist etwas genauer und berücksichtigt zudem den CPU-Takt.

Beide Funktionen finden sich in der Unit Windows, da sie der WinApi entstammen.
Weitere Informationen finden sich auf der MS-Page. ;)


Zuletzt bearbeitet von Marc. am Sa 10.01.09 18:41, insgesamt 1-mal bearbeitet
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.01.09 18:24 
user profile iconMarc. hat folgendes geschrieben:

QueryPerformanceCounter ist etwas genauer und berücksichtigt zudem den CPU-Takt.


Warum liest Du nicht selbst, was in Deinem Link zu finden ist - oder hast Du es nicht verstanden?

QueryPerformanceCounter hat mit dem CPU-Takt NICHTS zu tun!
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 10.01.09 18:40 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Warum liest Du nicht selbst, was in Deinem Link zu finden ist - oder hast Du es nicht verstanden?

Ich hatte das so in Erinnerung. :oops:

Edit: Hab den entsprechenden Teil in meinen Post als ungültig erklärt.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.01.09 19:43 
Auch wenn es eigentlich albern ist, habe ich mal eine Klasse zur Kapselung geschrieben. Viel Spaß damit ;)
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit WaitCounter;

interface

uses Windows, SysUtils;

type
  TWaitCounter = class
  private
    FStart,
    FStop,
    FFrequency: Int64;
    FWaitTime: Extended;
    FSuccess: Boolean;
  public
    constructor Create;
    procedure Start;
    procedure Stop;
    property WaitTime: Extended read FWaitTime;
  end;

implementation

{ TWaitCounter }

constructor TWaitCounter.Create;
begin
  inherited Create;
  FSuccess := QueryPerformanceFrequency(FFrequency);
  if not FSuccess then
    raise Exception.Create(SysErrorMessage(GetLastError));
end;

procedure TWaitCounter.Start;
begin
  if FSuccess and not QueryPerformanceCounter(FStart) then
    raise Exception.Create(SysErrorMessage(GetLastError));
end;

procedure TWaitCounter.Stop;
begin
  if FSuccess and not QueryPerformanceCounter(FStop) then
    raise Exception.Create(SysErrorMessage(GetLastError))
  else
    FWaitTime := (FStop - FStart) / FFrequency;
end;

end.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 10.01.09 19:52 
Bau noch eine Delay-Funktion ein, die auf 1/100ms genau funktioniert :lol:

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
WInfo
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 10.01.09 20:02 
Moin Moin DeddyH,

könntest noch die Zeit berücksichten zum Aufruf der API Funktion wie hier beschrieben.

Und nicht das Copyright und die Lizenz vergessen, da die Unit (Klasse) sicher häufig verwendet wird. (ggf. auch Lizenzgebühr und Anmeldung zum Patent, in der USA sicher lukrativ).

Edit: Außerdem wäre es fein, wenn die Klasse beim einbinden automatisch instanziert und im Finalization freigegeben würde.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.01.09 20:06 
Ja nee is klar (Knallköppe) :lol:
WInfo
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 10.01.09 20:09 
Ups, noch was vergessen, eine schöne Testunit wäre auch nicht schlecht, damit man bei Codeänderungen die Klasse schnell und effizient validieren könnt. :angel:

//Edit: Und einen Freiwillgen oder ein Team welches ein Tutorial dazu schreibt, wie man die Klasse am besten im Projekt einsetzt. Findet sich hier einer?
luckyluc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103



BeitragVerfasst: Sa 10.01.09 20:31 
Ok, Danke euch für eure vilen Antworten und Hilfen versuche sie entsprechend umzusetzen.
Danke! :)
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.01.09 20:58 
user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
Bau noch eine Delay-Funktion ein, die auf 1/100ms genau funktioniert :lol:


Wer's braucht: 0.01ms Delay

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure DelayQPC(t: cardinal);
var  a, b: Int64;
Begin
    QueryPerformanceFrequency(b);
    QueryPerformanceCounter(a);
    b := a + (b * t) div 100000;   // 100000 = 0.01ms
    While a < b do QueryPerformanceCounter(a);
end;

//Aufruf:
  DelayQPC(1); //1 = 0.01ms, 10 = 0.1ms
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 10.01.09 21:09 
Die ist aber sehr ungenau. Du solltest auf jedenfall den API-Aufruf abziehen, dann wirds besser :-P Laufzeit: 0.01257...ms

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)