文章目录
- Scheduler
-
- 简介
- 属性介绍
- 函数介绍
-
- 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)
- void priorityIn(tListEntry **list, const ccSchedulerFunc& callback, void *target, int priority, bool paused)
- void appendIn(_listEntry **list, const ccSchedulerFunc& callback, void *target, bool paused)
- void schedulePerFrame(const ccSchedulerFunc& callback, void *target, int priority, bool paused)
- void removeUpdateFromHash(tListEntry *entry)
- void update(float dt)
- Timer
- 涉及结构
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定时器,如果已存在则更新优先级。