Zu den Zeitfunktionen, time
, clock
getrusage
, clock_gettime
, gettimeofday
und timespec_get
, mag ich klar verstehen , wie sie umgesetzt werden und was sind ihre Rückgabewerte , um zu wissen , in welcher Situation ich habe sie zu nutzen.
Zuerst müssen wir Funktionen klassifizieren, die Wanduhrwerte zurückgeben , im Vergleich zu Funktionen, die Prozess- oder Threadwerte zurückgeben . gettimeofday
Gibt den Wanduhrwert zurück, clock_gettime
gibt den Wanduhrwert oder den Prozess- oder Threadwert zurück, abhängig von dem an ihn übergebenen Clock
Parameter. getrusage
und clock
Prozesswerte zurückgeben.
Die zweite Frage betrifft dann die Implementierung dieser Funktionen und folglich ihre Genauigkeit. Welchen Hardware- oder Softwaremechanismus verwenden diese Funktionen?
Es scheint, dass getrusage
nur der Kernel-Tick verwendet wird (normalerweise 1 ms lang) und daher nicht genauer als die ms sein kann. Ist es richtig? Dann getimeofday
scheint die Funktion die genaueste zugrunde liegende verfügbare Hardware zu verwenden. Infolgedessen beträgt seine Genauigkeit normalerweise die Mikrosekunde (kann aufgrund der API nicht höher sein) auf neuerer Hardware. Was ist mit clock
, die Manpage spricht von "Annäherung", was bedeutet das? Was clock_gettime
ist mit der API in Nanosekunden? Bedeutet dies, dass sie so genau sein kann, wenn die zugrunde liegende Hardware dies zulässt? Was ist mit Monotonie?
Gibt es noch andere Funktionen?
quelle
clock_gettime
, daher die Verwendunggettimeofday()
, ein wenig vielseitiger zu sein alsclock_gettime()
times()
(mit einem s), das seit Ausgabe 1 in POSIX existiert. In Bezug auf GNU / Linux: Laut der Manpage clock (3) wurde darüber hinausclock()
ab glibc 2.17 und früher implementiert, aber zur Verbesserung Präzision, es ist jetzt oben implementiertclock_gettime(CLOCK_PROCESS_CPUTIME_ID,...)
, was auch in POSIX angegeben ist, aber optional ist.time
undgettimeofday
kehren zumindest heutzutage Sekunden seit der Epoche zurück (auch bekannt als Unix-Zeitstempel). Dies ist unabhängig von Zeitzonen / Sommerzeit.C11
timespec_get
Anwendungsbeispiel unter: https://stackoverflow.com/a/36095407/895245
Die maximal mögliche zurückgegebene Genauigkeit beträgt Nanosekunden, die tatsächliche Genauigkeit ist jedoch implementierungsdefiniert und kann kleiner sein.
Es gibt die Wandzeit zurück, nicht die CPU-Auslastung.
glibc 2.21 implementiert es unter
sysdeps/posix/timespec_get.c
und leitet es direkt an:clock_gettime
undCLOCK_REALTIME
sind POSIX http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html undman clock_gettime
sagt, dass diese Maßnahme Diskontinuitäten aufweisen kann, wenn Sie einige Systemzeiteinstellungen ändern, während Ihr Programm ausgeführt wird.C ++ 11 chrono
Da wir schon dabei sind, wollen wir sie auch behandeln: http://en.cppreference.com/w/cpp/chrono
GCC 5.3.0 (C ++ stdlib befindet sich in der GCC-Quelle):
high_resolution_clock
ist ein Alias fürsystem_clock
system_clock
leitet an die erste der folgenden Optionen weiter, die verfügbar sind:clock_gettime(CLOCK_REALTIME, ...)
gettimeofday
time
steady_clock
leitet an die erste der folgenden Optionen weiter, die verfügbar sind:clock_gettime(CLOCK_MONOTONIC, ...)
system_clock
Gefragt bei: Unterschied zwischen std :: system_clock und std :: stetiger_takt?
CLOCK_REALTIME
vsCLOCK_MONOTONIC
: Unterschied zwischen CLOCK_REALTIME und CLOCK_MONOTONIC?quelle