20 Ocak 2020 Pazartesi

gettimeofday metodu

Giriş
Şu satırı dahil ederiz.
#include <sys/time.h>
Posix Epoch'tan beri geçen süreyi saniye + mikrosaniye çözünürlüğünde alabilmemizi sağlar. Bu metod obselete edilmiştir. clock_gettime metodunun kullanılması tavsiye edilmektedir.

Kullanım
İkinci parametre timezone bilgisini almak üzere tasarlanmış ancak problemli olduğu için hep NULL geçilir. Şöyle yaparız.
struct timeval tv;

int rc = gettimeofday(&tv, NULL);

if (rc == -1) {
  printf("Error: gettimeofday() failed\n");
  ...
}
struct timeval yapısı
struct timeval'in içi şöyle
struct timeval {
  time_t tv_sec;
  seconds_t tv_usec;
}
İki alanın açıklaması  aşağıda.
A timeval has two components, both ints. One (called tv_sec) is exactly the value that would be returned by time, the time in seconds since 1/1/1970. The other (called tv_usec) is the number of microseconds into that second.
Farkı Bulmak
difftime metodu
Şöyle yaparız. Mikrosaniye 1 milyona bölünerek saniyeye çevrilir. Toplam saniye döndürülür.
double wallclock_since(timeval const start)
{
  struct timeval  now;
  gettimeofday(&now, NULL);

  return difftime(now.tv_sec, start.tv_sec)
    + ((double)now.tv_usec - (double)start.tv_usec) / 1000000.0;
}
Elle Hesaplama
Örnek
Şöyle yaparız.
float timedifference_msec(struct timeval t0, struct timeval t1) {
  return (t1.tv_sec - t0.tv_sec) * 1000.0f + (t1.tv_usec - t0.tv_usec) / 1000.0f;
}

int main()
{
  struct timeval t0;
  struct timeval t1;
  float elapsed;

  gettimeofday(&t0, 0);
  ...
  gettimeofday(&t1, 0);

  elapsed = timedifference_msec(t0, t1);
  printf("%f\n", elapsed);

Hiç yorum yok:

Yorum Gönder