Time
-
Bisher arbeite ich mit Function A, um Laufzeiten in Millisekunden zu messen. Weshalb findet man im Internet häufig Implementierungen ähnlich wie Function B?
Function A:
inline int get_process_time() { return static_cast<int> (clock()); }
Function B:
inline int get_system_time() { #if defined(_MSC_VER) struct _timeb t; _ftime(&t); return int(t.time*1000 + t.millitm); #else struct timeval t; gettimeofday(&t, NULL); return t.tv_sec*1000 + t.tv_usec/1000; #endif }
-
Folgende unvollständige Implementierung ist auch oft zu finden:
inline int get_time() { #if defined(_WIN32) || defined(_WIN64) return GetTickCount() / 1000.0; #else // ??? #endif // _WIN32 || _WIN64
Ich benötige eine plattformübergreifende Lösung mit einer Genauigkeit von +-10ms.
-
Meines Erachtens tun die beiden Funktionen etwas völlig Unterschiedliches. Funktion A liefert die vom Prozess verwendete Prozessorzeit, während Funktion B die tatsächliche Systemzeit zurückgibt.
Anders ausgedrückt: Funktion B verwendet eine Uhr, die weiterläuft, wenn das Programm gerade nicht rechnet, während die Uhr, die in Funktion A verwendet wird, nur läuft, wenn das Programm auch tatsächlich gerade ausgeführt wird.
-
Tomahawk schrieb:
Bisher arbeite ich mit Function A, um Laufzeiten in Millisekunden zu messen. Weshalb findet man im Internet häufig Implementierungen ähnlich wie Function B?
Function A:
inline int get_process_time() { return static_cast<int> (clock()); }
Schrott. Zumindest auf Forumssicht. Ist C++ Kram.
Es gibt die ANSI C Funktion#include <time.h> clock_t clock(void);
welche die Zeitschritte in der Auflösung des Systemzeitgebers zurückgibt,
durch eine Division mit CLOCKS_PER_SEC ergeben sich die Sekunden.
Normalerweise entspricht clock_t => long, d.h. dein Downcast zu int führt u.U. zu sinnlosen Ergebnissen.
Mit clock() bist du maximal portabel und benötigst keine ifdefs o.ä.