it-swarm.dev

Bagaimana cara mengukur waktu dalam C?

Saya ingin mencari tahu berapa lama (kira-kira) beberapa blok kode dieksekusi. Sesuatu seperti ini:

startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);

Bagaimana?

35
snakile

Anda dapat menggunakan metode clock di time.h

Contoh:

clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
57
KLee1

Anda dapat menggunakan perpustakaan time.h , khususnya fungsi time dan difftime :

/* difftime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t start,end;
  double dif;

  time (&start);
  // Do some calculation.
  time (&end);
  dif = difftime (end,start);
  printf ("Your calculations took %.2lf seconds to run.\n", dif );

  return 0;
}

(Contoh diadaptasi dari halaman web berbeda yang ditautkan di atas.)

Harap dicatat bahwa metode ini hanya dapat memberikan akurasi detik - time_t mencatat detik sejak Epoch UNIX (1 Jan 1970).

17
Stephen

GetTickCount ().

#include <windows.h>
void MeasureIt()
{
    DWORD dwStartTime = GetTickCount();
    DWORD dwElapsed;

    DoSomethingThatYouWantToTime();

    dwElapsed = GetTickCount() - dwStartTime;

    printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000);
}
2
selbie

Saya akan menggunakan fungsi QueryPerformanceCounter dan QueryPerformanceFrequency dari API Windows. Panggil yang pertama sebelum dan sesudah blok dan kurangi (sekarang - lama) untuk mendapatkan jumlah "ticks" di antara instance. Bagilah ini dengan nilai yang diperoleh oleh fungsi yang terakhir untuk mendapatkan durasi dalam detik.

1
Andreas Rejbrand

Kadang diperlukan untuk mengukur waktu astronomi daripada waktu CPU (terutama ini berlaku pada Linux):

#include <time.h>

double what_time_is_it()
{
    struct timespec now;
    clock_gettime(CLOCK_REALTIME, &now);
    return now.tv_sec + now.tv_nsec*1e-9;
}

int main() {
    double time = what_time_is_it();
    printf("time taken %.6lf\n", what_time_is_it() - time);
    return 0;
}
0
Ivan Talalaev

Jika Anda tidak memerlukan resolusi fantastis, Anda dapat menggunakan GetTickCount (): http://msdn.Microsoft.com/en-us/library/ms724408(VS.85).aspx (Jika itu untuk sesuatu selain diagnosa sederhana Anda sendiri, maka catat bahwa nomor ini dapat digunakan, jadi Anda harus mengatasinya dengan sedikit aritmatika).

QueryPerformanceCounter adalah pilihan lain yang masuk akal. (Ini juga dijelaskan pada MSDN)

0
user357501