klink代码注释

一、存储4任务队列用std::map<taplt_task_key, taplt_task>

kilnk有四种触发方式,对应着四种任务队列,分别是iot_tasks_、speech_tasks_、var_tasks_和timed_tasks_。队列中单元都是taplt_task,那用什么std容器表示这个队列?——一个原则:以下操作既不能改变taplt_task对象指针,也不能影响xxx_tasks_排序

  1. 修改队列中taplt_task某个成员变量,像tbg_task::modify_task。
  2. 向队列添加一个taplt_task,不论在哪个位置。
  3. 从队列删除一个taplt_task,不论在哪个位置。

数据结构std::map,具体类型是std::map<taplt_task_key, taplt_task>。

  1. 用std::map<std::taplt_task_key, taplt_task>作为xxx_tasks_变量类型,而不是std::list<taplt_task>,是方便iot_tasks_、speech_tasks_,它们关键字是在创建后,就不会变了,用std::map可以快速找到某个taplt_task。
  2. 在taplt_task_key中引入成员“int aux_key_id”。对var_tasks_和timed_tasks_,用于klink排序的成员分别是var_at_、zerotz_t。过程中,这两成员会被修改,因而不能放进taplt_task_key,而是改放进aux_key_id。队列中,aux_key_id会确保唯一。至于klink排序,tklink会用个叫ttask_key的类型,当中排序用到var_at_、zerotz_t,不会用到aux_key_id。一句话,aux_key_id作用就是确保唯一。

taplt_task为什么要分开var_at、timed_at。——它们在表示意义上的确一样,是数组索引。但在一些地方,像取值范围,它们可能是不一样的。

 

二、klink导出配置

在klink导出配置时,如果存在待添加定时任务(add_timed_tasks),部分定时任务(timed_tasks_)可能是属于待添加定时任务,在导出时,得去掉这部分定时任务。“timed_ats”存着这部分定时任务。

为什么要在导出时就去掉,而不是等到导入时?——导出时是今天,导入时可能在10天后。等10天后,已不可能根据待添加定时任务删除定时任务,因为待添加任务存储的是UTC时间。

全部评论: 0

    写评论: