Zeitmessung in Millisekunden
-
Hallo Forum,
kennt jemand eine Möglichkeit, die Laufzeiten von Algorithmen Millisekundengenau zu messen?
Bisher hab ich das immer so gemacht:time_t begin = time(NULL); // ... time_t end = time(NULL); time_t diff = end - begin;
Das Problem ist, dass diese Methode nur Sekundengenau ist...
-
Unter Windows gibt es zum Beispiel
QueryPerformanceCounter
, hier wurde schon oft was dazu geschrieben.Wenn du zufälligerweise SFML benutzen solltest, existiert mit
sf::Clock
eine plattformunabhängige Möglichkeit, Zeit exakt zu messen.
-
SFML habe ich nicht und den
<windows.h>
-Header würde ich auch gerne vermeiden.
Gibt es da nicht auch was von Boost?
-
daersc schrieb:
SFML habe ich nicht und den
<windows.h>
-Header würde ich auch gerne vermeiden.
Gibt es da nicht auch was von Boost?Die Boost Timer-Library arbeitet afaik auch nur mit den Standard-Headerdateien und bietet dir da also auch nichts Genaueres.
MfG SideWinder
-
Windows oder Unix?
boost lib: posix time
ptime t(microsec_clock::local_time());
-
Aus time.h gibt es clock() und CLOCKS_PER_SEC, die müssten eigentlich höher auflösen als ms.
-
verwende doch clock aus ctime
-
Clock ist für Zeitmessung nicht geeignet.
int main( int argc, char **argv ) { clock_t st = clock(); usleep( 10000000 ); std::cout << clock() - st << std::endl; return 0; }
Ausgabe: 0
Warum? Weil die Clock-ticks gezählt werden, wenn die Anwendung die CPU belastet. Logischerweise passiert das bei Sleep nicht.
-
heldderarbeit schrieb:
Clock ist für Zeitmessung nicht geeignet.
int main( int argc, char **argv ) { clock_t st = clock(); usleep( 10000000 ); std::cout << clock() - st << std::endl; return 0; }
Ausgabe: 0
Warum? Weil die Clock-ticks gezählt werden, wenn die Anwendung die CPU belastet. Logischerweise passiert das bei Sleep nicht.
Wozu ist dann die Konstante
CLOCKS_PER_SEC
gut, wennclock()
gar nichts mit der Zeit zu tun hat?
-
Jein...
Wenn ich die Laufzeit eines Algorithmus wissen möchte, dann doch höchstwahrscheinlich, um dessen Performance zu verbessern. Daher gehe ich mal nicht davon aus, dass OP usleep()/Sleep() benutzt. Wenn OP ausschliessen kann, dass usleep()/Sleep() aufgerufen werden dann kann er clock() benutzen, oder irre ich mich da?
-
daersc schrieb:
Wozu ist dann die Konstante
CLOCKS_PER_SEC
gut, wennclock()
gar nichts mit der Zeit zu tun hat?Weil die CPU einige Millionen, wenn nicht sogar Milliarden Zyklen pro Sekunde durchlaufen kann. Um auf eine für Menschen verständliche Einheit zu kommen müssen die verstrichenen Zyklen durch die Anzahl der Zyklen geteilt werden, die die CPU pro Sekunde durchläuft. Damit kommt man dann auf die Einheit 1/s.
-
ok anderer vorschlag: führe die funktion 1000 mal aus und stoppe mit time, das ergebnis teilste dann wieder durch 1000