本文最后更新于2017年8月5日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!
=Start=
缘由:
学习需要
正文:
参考解答:
在 2.4 的内核中,并没有提供 POSIX timer 的支持,要在进程环境中支持多个定时器,只能自己来实现,好在 Linux 提供了 setitimer(2) 的接口。它是一个具有间隔功能的定时器 (interval timer),但如果想在进程环境中支持多个计时器,不得不自己来管理所有的计时器。
#include
int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);
Linux 自 2.6 开始,已经开始支持 POSIX timer 所定义的定时器,它主要由下面的接口构成 :
#include
#include
timer_create()
timer_settime()
timer_gettime()
timer_delete()
Linux 提供了基于文件描述符的相关定时器接口:
#include
int timerfd_create(int clockid, int flags);
int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);
int timerfd_gettime(int fd, struct itimerspec *curr_value);
除了以上3种Linux原生提供的计时器,我们还可以通过一些其它方法来达到类似的目的:
用 sleep/usleep/select 函数让进程睡眠一段时间,使用alarm定时发出一个信号,然后用signal/sigaction函数接收信号并进行特定处理;
还有那就是用 gettimeofday/difftime 等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用。
参考链接:
=END=