22 Aralık 2017 Cuma

timer_create metodu

timer_create metodu
timer_create(), timer_settime(),timer_connet(),timer_delete() beraber kullanılıyorlar.İlki timer nesnesini yaratır, ikincisi başlatır, sonuncusu ise timer nesnesini kapatır.

timer_create() POSIX sistemlerde signal'ler ile beraber kullanılıyor. POSIX uyumlu olmayan sistemlerde sinyal olmadan kullanılabilir.
POSIX sistemde SIGEV_SIGNAL ile kullanırsak tek thread'li bir timer elde ederiz. Eğer SIGEV_THREAD ile kullanırsak timer'ın her çalışmasında yeni bir thread içinde çalışmasını sağlarız.
İmzası
İmzası şöyle.
int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid);
Bu metod ile kullanılan timer_t çoğu derleyicide void * olarak tanımlı. Bu yüzden timer_delete() ile silinmesi gerekiyor.
typedef void * __timer_t;
typedef __timer_t timer_t;
Örnek
Şöyle yaparız.
timer_t timerID;

struct sigevent se;


/* Set and enable alarm */
se.sigev_notify = SIGEV_SIGNAL;
se.sigev_signo = SIGRTMIN;
se.sigev_value.sival_ptr = &timerID;
timer_create(CLOCK_REALTIME, &se, &timerID);
Örnek
Şöyle yaparız
timer_t  timer_id;
timer_callback  func = ...;
int val = ...;

struct sigevent se;
se.sigev_notify = SIGEV_THREAD;
se.sigev_value.sival_int = val;
se.sigev_notify_function = func;
se.sigev_notify_attributes = NULL;

int status = timer_create(CLOCK_REALTIME, &se, &timer_id);
timer_settime metodu
Örnek
Şöyle yaparız
float delay = ...;
float interval = ...;

struct itimerspec ts;

ts.it_value.tv_sec = delay;
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = interval;
ts.it_interval.tv_nsec = 0;

int status = timer_settime(timer_id, 0, &ts, 0);

Hiç yorum yok:

Yorum Gönder