c语言版定时器

时间:2014年06月15日 人气:...

今晚研究了下linux下的定时器,发现用户态并没有现成的封装好的接口,系统提供的这几个使用比较繁琐:



1.alarm:使用信号触发超时动作,一个进程只能拥有一个,感觉很土。



2.setitimer:原理同alarm,

功能比alarm强大,但也是采用信号触发超时动作,仍然感觉很土。



3.timerfd_create:这个会创建一个文件描述符,实现了linux一切皆设备的实现,主要和epoll等搭配使用,亲自试了一把,确实很好用,但是这个需要有

epoll_wait阻塞住持续调度,普通场合不一定方便使用。



4.timer_create:这个既可以靠信号触发,也可以起线程触发超时处理,比前前面几种较为简单,于是,对这个接口进行了简单的分装,以方便日常中使用。



注意:这套接口并没有严格测试,可不保证问题哦。。。。





//timer.h


#ifndef __TIMER_H__
#define __TIMER_H__

/* 秒级定时器,线程机制创建 */
/* 包含此定时器编译链接时需添加 -lrt 选项 */

/* flags值: 非循环定时器0,循环定时器1 */
#define NO_LOOP      0
#define LOOP_TIMER  1

/* 定时器超时处理函数 */
typedef void (*timer_callback_pf)(void *arg);

/* 创建定时器,成功返回定时器id,失败返回-1。*/
/* flags区分循环和非循环定时器;interval间隔时间,单位为秒。*/
/* callback为超时回调,不可为空; arg为超时回调处理参数,可为空。 */
long timer_add(unsigned int flags, int interval, timer_callback_pf callback, void *arg);

/* 定时器修改函数,修改之后会重新计时,成功返回0,失败返回-1 */
/* flags区分循环和非循环定时器;interval间隔时间,单位为秒。*/
int timer_mod(long timer_id, int flags, int interval);

🔒 本文后半部分需关注公众号解锁

请在公众号回复“文章解锁”获取验证码。

验证码 5 分钟内有效,单次使用

最美丽江花花草草大美长白山西北环形古都长安
推荐文章