Methode/Funktion zum Zeitmessen einer Funktion gesucht.
-
Du musst auf das Ende der Threads warten. Irgendwas in der Art threadwait(bla)
-
Ich bin auf der Suche nach genauen Zeitstempeln. Wobei es nicht die Uhrzeit sein muss, sondern eben einfach ein Wert der die Zeit repräsentiert, sodass verschiedene Zeiten in Relation gesetzt werden können:
Konkret: Es werden ständig Messwerte erstellt und man soll sehen können, welcher Messwert neuer ist. Ich will also einfach jedem Messwert eine Erstellungszeit geben mit der ich ihn nachher mit anderen vergleichen kann.double Erstellungszeit = clock(); std::cout << Erstellungszeit << std::endl;Leider kommt immer null raus

Soweit ich das verstanden habe zählt clock doch die CPU Ticks die seit Programmstart vergangen sind. Da sollte also doch ein Wert rauskommen! Außerdem können doch keine zwei Objekte zur gleichen Zeit erstellt werden, es liegen immer ein paar Ticks dazwischen. Kann ich also diese Erstellungszeit als eindeutige ID benutzen?
-
Wenn's nur für Linux sein soll, dann kannst du so an genauere Zeiten kommen:
#include <sys/time.h> timeval start, end; gettimeofday(&start, NULL); /* Mach irgendwas tolles */ gettimeofday(&end, NULL); long seconds = end.tv_sec - start.tv_sec; long useconds = end.tv_usec - start.tv_usec; long utime = ((seconds) * 1000000 + useconds); // vergangene Zeit in Mikrosekundenedit: Man beachte, dass die Auflösung des Zeitgebers nicht standardmäßig eine Mikrosekunde sein muss. Wie genau er tatsächlich ist, hängt von deinem System ab.
edit2: Im Linux-Unterforum hier gibt es bestimmt Leute, die noch genauere Methoden kennen, falls es diese gibt. Das was ich hier zeige hat mir persönlich immer gereicht und ich war froh, dafür nicht zu tief in die Systemprogrammierung einsteigen zu müssen.
-
Da nicht dabei steht für welches system dus suchst verweis eich mal auf meinen post weiter oben, der QueryPerformanceCounter liefert mit jedem Aufruf vergangene Ticks seit dem Start des PCs.
-
Ich programmiere unter Linux! Und zwar nutzen wir ein Kontron Board das anscheinend sogar einen WatchDog hat. Kann man den zufällig zur genauen Zeitmessung brauchen?
-
fabske schrieb:
Kann man den zufällig zur genauen Zeitmessung brauchen?
Keine Ahnung, ich will jetzt nicht das gesamte datenblatt durchlesen, aber Zeitmessung unter Linux allgemein habe ich ja schon weiter oben erklärt.
-
SeppJ schrieb:
aber Zeitmessung unter Linux allgemein habe ich ja schon weiter oben erklärt.
Hab ich grad ausprobiert, funktioniert wunderbar! Vieles Danke

-
Da ich die boost lib einsetze habe ich mir nun eine Funktion geschrieben die die Zeit in Millisekunden seit dem 1.1.1970 ausgeben soll, also einen UNIX timestamp. Leider verrechnet der sich um ca. 2,5 Jahre

unsigned long HIRN::gibuZeitstempel2(void) { boost::posix_time::ptime Urzeitpunkt = boost::posix_time::from_iso_string("19700101T000000"); boost::posix_time::ptime AktuelleZeit = boost::posix_time::microsec_clock::local_time(); boost::posix_time::time_duration VergangeneZeit = AktuelleZeit - Urzeitpunkt; return (unsigned long) VergangeneZeit.total_milliseconds(); };Weiß zufällig jemand warum?
Außerdem würde ich gerne microseconds machen, aber leider passt das anscheinend nicht in eine long

-
leider passt das anscheinend nicht in eine long
Mit uint64_t oder int64_t aus stdint.h (oder aber cstdint) hast du garantierte 64 Bit breite Integer.
-
Vielen Dank!