Autor |
Beitrag |
luckyluc
      
Beiträge: 103
|
Verfasst: 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
|
Verfasst: Sa 10.01.09 15:59
Zu beiden Funktionen solltest du über die Suche Beispiel hier im Forum finden.
|
|
luckyluc 
      
Beiträge: 103
|
Verfasst: Sa 10.01.09 16:07
also ich finde die bei der suche hier nicht im forum.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 10.01.09 16:17
GETTICKCOUNT liefert bei mir über acht Seiten Suchergebnisse. Also wenn da nichts dabei ist...
|
|
luckyluc 
      
Beiträge: 103
|
Verfasst: Sa 10.01.09 16:36
ja, gut dankeschön.
schleßlich bis du schon länger als ich im forum  und hast bestimmt raus wie man die besten suchergebnisse bekommst.
Dankeschön! 
|
|
luckyluc 
      
Beiträge: 103
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 10.01.09 17:47
GetTickCount:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var Zeit: Integer; begin Zeit := GetTickCount; Zeit := GetTickCount - Zeit; |
Die Funktion GetTickCount ermittelt die seit dem Systemstart vergangene Zeit in Millisekunden.
QueryPerformanceCounter:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var
t1, t2, freq: Int64; res: Extended; begin QueryPerformanceCounter(t1); 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
|
Verfasst: Sa 10.01.09 18:24
Marc. 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 10.01.09 18:40
hathor hat folgendes geschrieben : | Warum liest Du nicht selbst, was in Deinem Link zu finden ist - oder hast Du es nicht verstanden? |
Ich hatte das so in Erinnerung.
Edit: Hab den entsprechenden Teil in meinen Post als ungültig erklärt.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 10.01.09 19:43
Auch wenn es eigentlich albern ist, habe ich mal eine Klasse zur Kapselung geschrieben. Viel Spaß damit
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
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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 10.01.09 19:52
Bau noch eine Delay-Funktion ein, die auf 1/100ms genau funktioniert 
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
WInfo
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
|
Verfasst: Sa 10.01.09 20:06
Ja nee is klar (Knallköppe) 
|
|
WInfo
Hält's aus hier
Beiträge: 12
|
Verfasst: 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.
//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 
      
Beiträge: 103
|
Verfasst: 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
|
Verfasst: Sa 10.01.09 20:58
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 10.01.09 21:09
Die ist aber sehr ungenau. Du solltest auf jedenfall den API-Aufruf abziehen, dann wirds besser  Laufzeit: 0.01257...ms
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|