Linux提供
定时器机制,可以指定在未来的某个时刻发生某个事件,
定时器的结构如下:
-------------------------------
struct timer_list {
struct list_head list;
unsigned long expires;
unsigned long data;
void (*function)(unsigned long);
};
--------------------------------
list 实现的时候使用的,和 定时器功能无关
expires 是 定时器定时的滴答数(当前的滴答数为 jiffies )
function 到那个时刻内核调用的函数
data 由于可能多个 定时器调用一个函数,为了使得这个函数能够区分不同的 定时器,
通过在结构中 data 来标识这个 定时器,并且通过调用
function( data )
使得 function 能区分它们,也就是 data 起到 ID 的作用。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如何使用
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
将 定时器加到 定时器队列中
void add_timer(struct timer_list *timer)
修改 定时器的到期时间
int mod_timer(struct timer_list *timer, unsigned long expires)
将 定时器删除(以后这个 定时器将不再起作用)
int del_timer(struct timer_list * timer)
-------------------------------
struct timer_list {
struct list_head list;
unsigned long expires;
unsigned long data;
void (*function)(unsigned long);
};
--------------------------------
list 实现的时候使用的,和 定时器功能无关
expires 是 定时器定时的滴答数(当前的滴答数为 jiffies )
function 到那个时刻内核调用的函数
data 由于可能多个 定时器调用一个函数,为了使得这个函数能够区分不同的 定时器,
通过在结构中 data 来标识这个 定时器,并且通过调用
function( data )
使得 function 能区分它们,也就是 data 起到 ID 的作用。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如何使用
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
将 定时器加到 定时器队列中
void add_timer(struct timer_list *timer)
修改 定时器的到期时间
int mod_timer(struct timer_list *timer, unsigned long expires)
将 定时器删除(以后这个 定时器将不再起作用)
int del_timer(struct timer_list * timer)
如果不要求很精确的话,用 alarm() 和 signal() 就够了
代码:
/* * Example for alarm. */ #include <stdio.h> #include <unistd.h> #include <signal.h> void sigalrm_fn(int sig) { /* Do something */ printf("alarm!\n"); alarm(2); return; } int main(void) { signal(SIGALRM, sigalrm_fn); alarm(2); /* Do someting */ while(1) pause(); }
用select()函数可以实现定时,而且可以将时间精确到毫秒级