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,并且冻结定时器的时间计数。