add_timer, del_timer, init_timer - イベントタイマを管理する
#include <asm/param.h> #include <linux/timer.h> extern void add_timer(struct timer_list * timer); extern int del_timer(struct timer_list * timer); extern inline void init_timer(struct timer_list * timer);
add_timerは1つのイベントをスケジュールし、それをカーネルが管理 するイベントのリンク・リストに追加する。del_timerはスケジュール ・イベントを削除する。timer は以下の構造体を指す。
struct timer_list { struct timer_list *next; struct timer_list *prev; unsigned long expires; unsigned long data; void (*function)(unsigned long); };
init_timerはnextとprevをNULLにセットする。これはadd_timerへの 引数として必要となる。expiresはタイマがタイムアウトするまでの 希望する持続時間をjiffiesで指定する。jiffiesは、1秒間にHZ (一般的には100)回カウント・アップされる単位である。
タイマが満了すると、指定した関数がdataをその引数としてコール される。そのイベントを削除するのは関数の責任である。複数の タイマに同じ関数がマッピングされている場合、いずれかのタイマを 取り消すためにその引数が利用できる。
del_timerは0を返すか、もしnextまたはprevがNULLでないのにタイマ が見つからない場合は負の数を返す。del_timerはまた、そのタイマが 満了する前に、expiresに残り時間をセットし、nextとprevにNULLを セットする。しかしながら、add_timerの直後にdel_timerをコール しても何も起こらない。これは、2つのコールの間にはカーネル内部 の時計が進まないからである。
Linus Torvalds