3 Ekim 2021 Pazar

clock_gettime metodu

Giriş
Şu satırı dahil ederiz.
#include <time.h>
clock_gettime ile birçok saat çeşidi gelmektedir.
Açıklaması şöyle
POSIX only requires that CLOCK_REALTIME be present, other clocks are optional.
Monotonic Saat - CLOCK_MONOTONIC
Örnek
Şöyle yaparız
clock_gettime(CLOCK_MONOTONIC, & spec);
Örnek
Şöyle yaparız.
struct timespec start, end;
for(i = 0; i < pkt_count; ++i)
{

  clock_gettime(CLOCK_MONOTONIC, &start);        
  ...
  clock_gettime(CLOCK_MONOTONIC, &end);        

  printf("%.3f ", timespec_diff_usec(&end, &start));
}   
timespec_diff_usec() metodu burada tanmlı.

Monotonic Saat - CLOCK_MONOTONIC_RAW
CLOCK_MONOTONIC_RAW Linux'a mahsus bir saat ve direkt donanımla konuştuğu yazılı ancak bu cümleden tam ne kast ediliyor bilmiyorum.
Örnek
Şöyle yaparız.
struct timespec tp;
clock_gettime(CLOCK_MONOTONIC_RAW, &tp);
Sistem Saati - CLOCK_REALTIME
Epoch'tan beri geçen süreyi yani UTC saati almak için CLOCK_REALTIME saatini kullanmak gerekir. Bu metod ile saniye + nanosaniye seviyesinde ölçüm yapmak mümkündür. Yani gettimeofday metoduna göre daha hassastır.
Bu metod sonucu ikinci parametre olan struct timespec'i doldurarak verir.
Örnek
Şöyle yaparız
#include <unistd.h>
#include <time.h>

int main()
{
    // Çıktı olarak 876,764,530 saniye döner
    printf("time returns %d seconds\n", time(NULL);)
   
    //Çıktı olarak 876,764,530 saniye 000,0674,633 nanosaniye döner
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    printf("%d seconds and %ld nanoseconds\n", ts.tv_sec, ts.tv_nsec);
}
Örnek
Bir başka örnekte ise sistemin verdiği saati 5 saniye ileri alınıyor.
struct timespec start;
clock_gettime(CLOCK_REALTIME, &start); start.tv_sec+=5; //5 saniye ileri al
Örnek
Şöyle yaparız.
struct timespec  ts;

if (clock_gettime(CLOCK_REALTIME, &ts))
{
  ...  
}
Örnek
clock_gettime POSIX eş zamanlılık API'leri ile kullanılır. Şöyle yaparız.
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 10; // ten seconds
while (!my_condition && ret == 0)
  ret = pthread_cond_timedwait (&cond, &mutex, &ts);
Kullanılan CPU Saati - CLOCK_PROCESS_CPUTIME_ID
Açıklaması şöyle. Uygulamanın kullandığı CPU zamanını ölçer.
Most operating systems have some clocks that will only count while your process is running. These are not standardized, but on POSIX systems you could consider using clock_gettime() with CLOCK_PROCESS_CPUTIME_ID.
Örnek
Şöyle yaparız
timespec time1, time2;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
...
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);


Hiç yorum yok:

Yorum Gönder