lwip timer机制

1,全局链表变量:next_timeout;

2,使用sys_timeout向next_timeout中添加某一timer成员,该timer的handler中会再向next_timeout中添加自身作为成员变量;

3,在tcpip thread的主循环中,会不断的从next_timeout中取出成员,并判断该成员是否已经超时,如果超时,则执行相应的handler方法;


在向外取timeout成员时,会使用条件等待变量:

time_needed = sys_arch_sem_wait(&mbox->not_empty, timeout);

当mbox不为空的事件发生时,上述函数会返回,并且time_needed会保存消耗的时间,用来更新next_timeout中的超时时间长度。

也即,当mbox为空时,基于next_timeout中成员的时间长度设置来等待定时器超时,从而触发相应的handler函数执行。

当mbox不为空时,返回处理mbox中的msg,并且冻结定时器的时间计数。

你可能感兴趣的:(Linux,system,management)