Thttpd服务器对于请求处理,请求响应和CGI子程序的运行时间是有限制的,这里面限制是由Timer.c文件中的函数完成的。计时器的结构为:
typedef struct TimerStruct {
TimerProc* timer_proc;
ClientData client_data;
long msecs;
int periodic;
struct timeval time;
struct TimerStruct* prev;
struct TimerStruct* next;
int hash;
} Timer;
由此可知此结构为一个双向链表结构。
timer_proc为延时处理函数。
client_data为函数的参数。
msecs:为延时处理时间单位为毫秒。
periodic:为计时器重加载表示
time:为此时间处理函数执行的时间。
prev:为此计时器的前向指针。
next:为此计时器的后向指针
hash:为计算的此计时器的hash值。
下面将介绍这个文件中的函数。
static unsigned int hash( Timer* t )
hash函数是根据传入的Timer型数据的秒数和毫秒数的异或计算在去计时器数组数的余,得到这个时间再计时器数组中的位置。
static void l_add( Timer* t )
l_add是将创建的计时器处理函数添加在计时器处理链表中,如果计算在hash值的表项的值为空表示此表项为空设置t为此表项的头结点,对于此表项不为空(hash表存在冲突)根据执行时间的先后顺序排序在此表项中的位置