Giriş
Bu metod Linux'a mahsus bir çağrı. Bu metod ile select veya poll ile dinlenebilen bir timer yaratılabilir. Şöyle yaparız.
Birinci parametre olarak CLOCK_MONOTONIC, CLOCK_REALTIME gibi seçenekle kullanılabilir. İkinci parametre olarak flag verilir. Eğer Linux sürümü destekliyorsa TFD_CLOEXE yani close-on-exec kullanılabilir.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Eğer hata varsa 0'dan küçük bir değer döner. Şöyle yaparız.
Şöyle yaparız.
Interval atamak için şöyle yaparız.
Bu metod Linux'a mahsus bir çağrı. Bu metod ile select veya poll ile dinlenebilen bir timer yaratılabilir. Şöyle yaparız.
uint64_t expired = 0;
read (timerfd, &expired, sizeof(uint64_t));
timerfd_create metoduBirinci parametre olarak CLOCK_MONOTONIC, CLOCK_REALTIME gibi seçenekle kullanılabilir. İkinci parametre olarak flag verilir. Eğer Linux sürümü destekliyorsa TFD_CLOEXE yani close-on-exec kullanılabilir.
Örnek
Şöyle yaparız.
int timerfd = timerfd_create(CLOCK_MONOTONIC,0);
ÖrnekŞöyle yaparız.
int timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);
ÖrnekEğer hata varsa 0'dan küçük bir değer döner. Şöyle yaparız.
if( timerfd < 0 ) {
printf("Timer fd failed\n");
}
ÖrnekŞöyle yaparız.
int epoll_reactor::do_timerfd_create()
{
#if defined(BOOST_ASIO_HAS_TIMERFD)
# if defined(TFD_CLOEXEC)
int fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
# else // defined(TFD_CLOEXEC)
int fd = -1;
errno = EINVAL;
# endif // defined(TFD_CLOEXEC)
if (fd == -1 && errno == EINVAL)
{
fd = timerfd_create(CLOCK_MONOTONIC, 0);
if (fd != -1)
::fcntl(fd, F_SETFD, FD_CLOEXEC);
}
timerfd_settime metoduInterval atamak için şöyle yaparız.
int milliseconds = 50;// 50 ms for example
struct itimerspec timspec;
timspec.it_interval.tv_sec = 0;
timspec.it_interval.tv_nsec = milliseconds * 1000000;
Delay atamak için şöyle yaparız.timspec.it_value.tv_sec = 1;
timspec.it_value.tv_nsec = 0;
Başlatmak için şöyle yaparız.int res = timerfd_settime(timerfd, 0, &timspec, 0);
Hiç yorum yok:
Yorum Gönder