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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值