Tiga alternatif
clock()
gettimeofday()
clock_gettime()
clock_gettime()
akurasi hingga nanodetik dan mendukung 4 jam.
-
CLOCK_REALTIME
Jam waktu nyata di seluruh sistem. Menyetel jam ini memerlukan hak istimewa yang sesuai.
-
CLOCK_MONOTONIC
Jam yang tidak dapat disetel dan mewakili waktu monoton sejak beberapa titik awal yang tidak ditentukan.
-
CLOCK_PROCESS_CPUTIME_ID
Timer per proses beresolusi tinggi dari CPU.
-
CLOCK_THREAD_CPUTIME_ID
Jam waktu CPU khusus thread.
Anda dapat menggunakannya sebagai
#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
Catatan:Fungsi jam () mengembalikan waktu CPU untuk proses Anda, bukan waktu jam dinding. Saya percaya inilah yang diminati OP. Jika waktu jam dinding diinginkan, maka gettimeofday() adalah pilihan yang baik seperti yang disarankan oleh jawaban sebelumnya. clock_gettime() dapat melakukan salah satunya jika sistem Anda mendukungnya; pada sistem tertanam linux saya clock_gettime() tidak didukung, tetapi clock() dan gettimeofday() didukung.
Di bawah ini adalah kode untuk mendapatkan waktu jam dinding menggunakan 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;
}
Untuk memulainya, Anda perlu menggunakan aritmatika floating point. Nilai bilangan bulat apa pun yang dibagi dengan nilai bilangan bulat yang lebih besar akan selalu menjadi nol.
Dan tentu saja Anda harus benar-benar melakukannya sesuatu antara mendapatkan waktu mulai dan berakhir.
Omong-omong, jika Anda memiliki akses ke gettimeofday
biasanya lebih disukai daripada clock
karena memiliki resolusi yang lebih tinggi. Atau mungkin clock_gettime
yang memiliki resolusi lebih tinggi.