使用timerfd的好处是可以结合epoll或poll或select使用,当超时时间到时epoll等会返回可读。
1.
int timerfd_create(int clockid,int flags)
timerfd_create返回一个文件描述符,该文件描述符和定时器所关联。
clockid:
clockid可以为CLOCK_REALTIME或者CLOCK_MONOTONIC。最好使用CLOCK_MONOTONIC,这样的话即使你改变了系统时钟的话也不会受到影响,但是CLOCK_REALTIME会受到硬性。如果对这两个选项感兴趣的话可以自行去网上查写关于他们的资料。
flags:
flags可以是TFD_NONBLOCK、TFD_CLOEXEC的或。设置TFD_NONBLOCK代表把返回的文件描述符设置为非阻塞模式,这个和用fcntl设置该文件描述符的O_NONBLOCK的效果一样。设置TFP_CLOEXEC代表当执行exec时该文件描述符会自动关闭。
2.
int timerfd_settime(int fd,int flags,const struct itimerspec *new_value,struct itimerspec *old_value)
timerfd_settime可以启动或者停止定时器。
让我们先看看两个结构体:
struct timespec{
time_t tv_sec;//秒数
long tv_nsec;//纳秒数
}
struct itimerspec{
struct timespec it_interval;
struct timespec it_value;
}
参数说明:
new_value.it_value:设置初始定时器时间。只要new_value.it_value中的tv_sec和tv_nsec有一个不为0,则启动定