定时器-Vision Timer源码分析

本文深入分析了Vision Timer的源码,重点介绍了vp_Timer类中的Event和Handle类,以及vp_TimeUtility的时间转换和管理。vp_Timer通过m_Active和m_Pool列表实现Event对象的循环利用,优化内存效率。vp_TimeUtility提供了时间单位转换和时间到字符串的转换功能。然而,当设置Event的Iterations和Interval时,可能存在Interval与Time.deltaTime不匹配导致的执行次数不足的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vp_Timer 

一共有3个class,都各司其职:vp_Timer,Event,Handle

    1)vp_Timer:提供的使用接口,通过静态方法vp_Timer.In(),加入定时器事件(函数,这里将传入的函数称为事件)
    2)Event:用来封装传入的事件(函数),保持事件的状态

    3)Handle:对事件状态提供查询接口(事件执行了多长时间,结束时间,是否还是Active)以及提供 Excute(立即执行事件),Cancel(取消事件),Pause(暂停事件)等操作

 List<Event> m_Active 和 List<Event> m_Pool :这个List都是Event的缓存,其中,m_Active缓存Active的Event,m_Pool缓存无效的Event,这里的Acitive是事件仍然需要执行,无效说明不会再被调用。之所有要缓存无效的Event,是为了节省创建Event对象的消耗。m_Pool就好比垃圾箱,m_Active是一个成品工厂,每次m_Active要生产(Add)新的Event,都去m_Pool取没用的原料(Event),当m_Active的成品没用了,用放会m_Pool中去,这样就达到了循环利用作用。

vp_TimeUtility 

定义了个表示时间的结构Units:
1.时间与Units的相互转换:
2.时间转换为字符串string:
3.时间对应时钟的转过的度数:

ps:当Event的参数: Iterations 和  Interval 没有很好处理 Interval 和 Time.deltaTime 的具体情况,假设我们的 Iterations =100 , interval = 0.01f  即我需要达到1s内执行100次的目的,但按照vp_Timer的实现结果是执行了100次,但是时间一定是>= 1s,即当Time.deltaTime > interval 时,还是只执行一次,例如 Time.deltaTime = 0.02f, 理论上我们希望能执行两次,但是却只执行了一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值