Cocos2d-x C++ Scheduler、Timer 源码简析

本文深入解析Cocos2d-x的Scheduler组件,包括时间缩放、任务列表和hash表等属性,以及schedule、unschedule等关键函数。同时介绍了Timer的基本原理,如elapsed、repeat等属性和isExhausted、trigger等方法,以及如何通过子类实现自定义定时任务。
摘要由CSDN通过智能技术生成

Scheduler

简介

Scheduler(调度器)是引擎的核心组件之一,管理全局生命周期中的Timer(定时器)。同时,引擎中大部分延迟、定时执行的功能(比如Action、SocketIO心跳包、下载文件更新进度)也是通过Scheduler调度的。

调度器可以设置两种定时任务:update selector 和 custom selector。其中custom selector可以自定义定时执行的间隔时间,而update selector固定每帧调用一次,但update selector拥有更好的性能和更少的内存占用。

属性介绍

time scale

时间缩放,影响所有的定时器(包括Action),值越大定时器执行的越快。

updates neg/0/pos list

根据优先级分开存储的记录了定时update的双向链表,用于快速遍历update任务。

hash for updates/timers

update/timer hash表的头节点,通过这个节点进行hash表的查询。

update delete vector

在Scheduler的update期间取消update定时器时,不会立刻移除而是放在此数组中,之后在Scheduler的update末尾再进行删除。如果立刻删除当前的update,就会导致无法根据next指针找到下一个update。

current target

指向当前正在执行定时任务的节点。

current target salvaged

当前节点时候不再需要,如果节点所有的定时器都被取消,节点会被从hash表中移除以提升性能。

update hash locked

当前是否在Scheduler的update状态。

functions to perform

需要在Scheduler的update末尾时调用的函数列表,添加和删除操作是线程安全的,一般用于在其他线程中调用主函数的回调。

函数介绍

void schedule(const ccSchedulerFunc& callback, void *target, float interval, unsigned int repeat, float delay, bool paused, const string& key)

新建一个自定义的定时器,如果已存在则更新信息。

void unschedule(const string &key, void *target)

移除一个自定义定时器,移除后如果节点目标没有任何定时器则将这个节点从hash表中移除。

void priorityIn(tListEntry **list, const ccSchedulerFunc& callback, void *target, int priority, bool paused)

将一个update定时器根据优先级插入到指定的list中。

void appendIn(_listEntry **list, const ccSchedulerFunc& callback, void *target, bool paused)

将一个update定时器直接插入到指定的list中,用于优先级为0的列表。

void schedulePerFrame(const ccSchedulerFunc& callback, void *target, int priority, bool paused)

新建一个update定时器,如果已存在则更新优先级。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值