遍历计时器的方法及装置的制造方法_2

文档序号:9887471阅读:来源:国知局
开始遍历,查找节点数值小于等于当前时刻值的目标节点。
[0036]本实施例中,服务器查找并关闭的计时器为已经到时的计时器。所述已经到时的计时器对应节点数值小于或等于当前时刻值的节点。服务器在遍历二叉树时,只要找到这些节点数值小于或等于当前时刻值的节点即可。具体的,当遍历二叉树时,服务器获取一个当前时刻值,该当前时刻值可以向系统时钟获取。然后服务器从根节点开始遍历,将当前时刻值与各个节点的中数值进行比较。如果当前时刻值大于节点数值,则说明该节点的到时时刻值在当前时刻值之前,该节点对应的计时器已经到时。并且,由于该节点左侧分支下的所有节点数值都小于该节点的节点数值,因此,该节点左侧分支下的所有节点对应的计时器全部到时。然后服务器继续遍历该节点的右侧分支。如果当前时刻值小于节点数值,则月艮务器仅对当前节点的左侧分支进行遍历即可,因为当前节点右侧分支的全部节点数值均大于当前节点的数值,因此与当前时刻值相比并未到时。如果当前时刻值大于下一级节点的节点数值,则将该下一级节点左侧分支下的所有节点确定为51J时计时器的节点,并遍历下一级节点的右侧分支;如果当前时刻值小于下一级节点的节点数值,则继续进行下一级节点左分支的遍历,直至遍历到最后一级节点为止。
[0037]示例性的,如图2b所示,假设服务器执行步骤102时的时刻值为“3.5”,服务器从根节点“4”开始遍历。当前时刻值小于根节点“4”,服务器向左遍历到节点“3”,将节点“3”及其左侧分支下的所有节点确定为到时计时器的节点。然后遍历节点“3”右侧分支的下一级节点“3.6”,将该节点确定为未到时计时器的节点。由于节点“4”大于当前时刻值,所以节点“4”右侧分支下的所有节点数值均大于当前时刻值,即其对应的计时器均为到时,因此服务器无需对节点“4”右侧分支下的节点进行遍历。由此,查找出的到时计时器为节点“3”、“2”、“I”及“2.8”对应的计时器,即图中虚线节点对应的计时器。
[0038]可以看出,当遍历到节点数值小于当前时刻值的节点时,该节点左侧分支下的所有节点就不必再进行遍历了,而当遍历到节点数值大于当前时刻值的节点时,该节点右侧分支下的所有节点也不必再进行遍历。因此相比现有技术中遍历N次计时器(N为计时器数量),本方法可以减少计时器的遍历次数。实际应用中,计时器数量越多、二叉树节点层级越多,本方法节省的遍历次数就越多。
[0039]103、关闭目标节点对应的计时器。
[0040]本实施例中,当计时器到时时,计时器事件会自动将对应的数据从内存中删除。月艮务器执行步骤103,将删除数据的计时器关闭。当然,也可以在执行步骤103时,由服务器删除到时计时器对应的数据,或者确认到时计时器对应的数据是否已被删除。
[0041 ]在上述图2b示例中,服务器关闭节点“3”、“2”、“I”及“2.8”对应的计时器。
[0042]需要说明的是,为便于表述和理解,本实施例中的节点数值以及当前时刻值已经被简化为数字。实际应用中,节点数值或当前时刻值应当诸如“13:04:12”的形式存在。当然,实际应用中,对节点数值和当前时刻值的比较方式和比较标准仍然是相同的。
[0043]本发明实施例提供的遍历计时器的方法,能够根据计时器到时时刻值的大小构建计时器二叉树,其中,节点数值大于父节点数值的子节点为父节点的右子节点,节点数值小于父节点数值的子节点为父节点的左子节点。在遍历计时器时,通过对计时器二叉树的遍历查找到时的计时器。本发明实施例中,计时器二叉树根据节点数值的大小构建左右分支,当遍历到计时器到时的节点时,可以将该节点左侧分支的所有下级节点全部确定为目标节点,而无需继续对这些节点依次进行遍历。与现有技术相比,本发明实施例能够大大减少计时器的遍历次数,提高计时器的遍历效率,节省服务器的处理资源。
[0044]进一步的,作为对图1所示方法的细化,本发明实施例还提供了一种遍历计时器的方法。如图3所示,该方法包括:
[0045]301、构建计时器二叉树。
[0046]当新增计时器时,服务器从根节点开始进行遍历,若新增节点的节点数值小于当前节点的节点数值,则对当前节点的左侧分支继续遍历;若新增节点的节点数值大于当前节点的节点数值,则对当前节点的右侧分支继续遍历。当遍历到最后一级节点时,增加新增节点。该新增节点的节点数值为其对应计时器的到时时刻值。
[0047]实际应用中,常常会出现这样的情况:不同计时器拥有相同的到时时刻值。本实施例中,如果新增节点的节点数值等于当前节点的节点数值,则将当前节点确定为新增计时器的节点,即两个计时器共用一个节点。
[0048]在本实施例的一个示例中,服务器将新增节点“3.5”添加到图4a所示的二叉树中。首先将新增节点“3.5”与根节点“6”比较,前者小于后者;继续与根节点“6”左侧分支下的下一级节点“5”比较,前者仍小于后者;继续与节点“5”左侧分支下的下一级节点“4”比较,前者仍小于后者;继续与节点“4”左侧分支下的下一级节点“3”比较,前者大于后者,服务器将节点“3.5”添加到节点“3”的右侧分支下。得到图4b所示的新二叉树。
[0049]如果新增节点为“2.5”,那么与图4b的区别在于,服务器将新增节点“2.5”添加到节点“3”的左侧分支下,即如图4c所示。
[0050]302、从根节点开始遍历,查找节点数值小于等于当前时刻值的目标节点。
[0051]在对二叉树进行遍历时,如果当前节点的节点数值小于或等于当前时刻值,则说明当前节点对应的计时器已经到时,并且由于当前节点左侧分支下的所有节点数值均小于该当前节点的节点数值,因此左侧分支下的所有节点对应的计时器全部到时,服务器直接将当前节点以及当前节点左侧分支的所有下级节点,确定为目标节点。然后继续遍历当前节点右侧分支的下级节点。如果当前节点的节点数值大于当前时刻值,则说明当前节点对应的计时器没有超时。对于当前节点右侧分支下的所有节点,由于其数值比当前节点的节点数值大,因此其对应的计时器一定未到时,服务器可以不对右侧分支下的所有节点进行遍历。
[0052]可以看出,本实施例相对现有技术而言,在两个方面节省了计时器的遍历次数:
[0053]1、当当前时刻值大于当前节点数值时,不必再对当前节点左侧分支下的所有节点进行遍历。
[0054]2、当当前时刻值小于当前节点数值时,不必再对当前节点右侧分支下的所有节点进行遍历。
[0055]303、获取目标节点的节点标识。
[0056]服务器在构建计时器二叉树时,可以维护一个二叉树列表,该列表中记录有节点标识和节点位置信息的对应关系。所谓节点位置信息用于描述节点在二叉树中的位置,通过目标节点的节点位置信息可以查找到目标节点的节点标识。
[0057]304、查找对应节点标识的计时器标识。
[0058]服务器可以维护一个计时器列表,该列表用于记录节点标识和计时器标识之间的对应关系。通常情况下,一个节点标识对应一个计时器标识,但是当多个计时器的到时时刻值相等时,一个节点标识可以对应多个计时器标识。
[0059]305、根据计时器标识查找待关闭的计时器。
[0060]306、终止待关闭计时器的线程任务。
[0061]根据计时器标识查找到需要关闭的计时器后,服务器终止待关闭计时器的线程任务。
[0062]307、删除被关闭计时器对应的节点。
[0063]本实施例中,服务器还需要在关闭计时器后对二叉树进行更新,即将关闭的计时器对应的节点从二叉树中删除。
[0064]308、根据节点数值的大小,对被关闭计时器对应的节点右侧分支的下级节点重新进行排序。
[0065]对于被删除节点下级的节点,服务器需要对其重新进行排序,以构建新的二叉树。与前述增加节点的规则相同,重新排序的规则仍是以节点数值为依据,节点数值小于上级节点数值的节点部署在上级节点的左侧分支,节点数值大于上级节点数值的节点部署在上级节点的右侧分支。
[0066]示例性的,当根据当前时刻值“4.2”将图4c中的节点“4”、“3”及“2.5”删除后,服务器将节点“4.8”接续到节点“5”的左侧分支
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1