Drei Alternativen
clock()
gettimeofday()
clock_gettime()
clock_gettime()
geht bis zu einer Genauigkeit von Nanosekunden und unterstützt 4 Uhren.
-
CLOCK_REALTIME
Systemweite Echtzeituhr. Zum Einstellen dieser Uhr sind entsprechende Berechtigungen erforderlich.
-
CLOCK_MONOTONIC
Uhr, die nicht eingestellt werden kann und seit einem unbestimmten Startpunkt eine monotone Zeit darstellt.
-
CLOCK_PROCESS_CPUTIME_ID
Hochauflösender Pro-Prozess-Timer von der CPU.
-
CLOCK_THREAD_CPUTIME_ID
Thread-spezifische CPU-Zeituhr.
Sie können es verwenden als
#include <time.h>
struct timespec start, stop;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
/// do something
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop);
double result = (stop.tv_sec - start.tv_sec) * 1e6 + (stop.tv_nsec - start.tv_nsec) / 1e3; // in microseconds
Hinweis:Die Funktion clock() gibt die CPU-Zeit für Ihren Prozess zurück, nicht die Uhrzeit der Wanduhr. Ich glaube, das OP war daran interessiert. Wenn die Uhrzeit der Wanduhr gewünscht wird, ist gettimeofday() eine gute Wahl, wie in einer früheren Antwort vorgeschlagen. clock_gettime() kann beides tun, wenn Ihr System dies unterstützt; Auf meinem eingebetteten Linux-System wird clock_gettime() nicht unterstützt, aber clock() und gettimeofday() werden unterstützt.
Unten ist der Code zum Abrufen der Wanduhrzeit mit gettimeofday()
#include <stdio.h> // for printf()
#include <sys/time.h> // for clock_gettime()
#include <unistd.h> // for usleep()
int main() {
struct timeval start, end;
long secs_used,micros_used;
gettimeofday(&start, NULL);
usleep(1250000); // Do the stuff you want to time here
gettimeofday(&end, NULL);
printf("start: %d secs, %d usecs\n",start.tv_sec,start.tv_usec);
printf("end: %d secs, %d usecs\n",end.tv_sec,end.tv_usec);
secs_used=(end.tv_sec - start.tv_sec); //avoid overflow by subtracting first
micros_used= ((secs_used*1000000) + end.tv_usec) - (start.tv_usec);
printf("micros_used: %d\n",micros_used);
return 0;
}
Zu Beginn müssen Sie Gleitkommaarithmetik verwenden. Jeder ganzzahlige Wert dividiert durch einen größeren ganzzahligen Wert ist immer Null.
Und das sollten Sie natürlich tun etwas zwischen Start- und Endzeit.
Übrigens, wenn Sie Zugriff auf gettimeofday
haben es wird normalerweise gegenüber clock
bevorzugt da es eine höhere Auflösung hat. Oder vielleicht clock_gettime
die eine noch höhere Auflösung hat.