GNU/Linux >> Belajar Linux >  >> Linux

Mengukur waktu yang telah berlalu di linux untuk program c

Tiga alternatif

  1. clock()
  2. gettimeofday()
  3. 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.


Linux
  1. Perintah Tidur Linux – tunda selama waktu tertentu

  2. Bagaimana Cara Memuat Program Untuk Memulai Lebih Cepat?

  3. Format tanggal dan waktu untuk skrip atau variabel shell Linux

  1. Tutorial Perintah waktu Linux untuk Pemula (dengan Contoh)

  2. Linux – Alat Untuk Mengukur Kualitas Entropi?

  3. Ukur waktu di Linux - waktu vs jam vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?

  1. Jam Gratis Terbaik untuk Linux

  2. 7 Contoh Perintah hwclock Linux untuk Mengatur Waktu Tanggal Jam Perangkat Keras

  3. Cara mengatur ID proses di Linux untuk program tertentu