一种定时器的实现方法 【技术领域】
本发明涉及定时器技术,特别涉及软件定时器技术。
背景技术
众所周知,定时器功能在软件开发中是极其重要的,也是无处不在的。无论是在计算机上的应用软件开发还是嵌入式产品下的开发,都是必不可少的一个重要模块,如电视机中的定时开关机、播放器软件中的播放进度条显示等等,都是离不开定时器管理的,现在大多数产品的软件开发中,定时器的管理都是基于硬件时钟的接口函数或系统函数来实现的,存在很大的不统一性,不方便软件模块的整体移植,另外在对多个定时器事件的管理方面比较混乱。
【发明内容】
本发明所要解决的技术问题,就是为了克服目前软件定时器不方便软件模块的整体移植的缺点,提供一种定时器的实现方法。
本发明解决其技术问题,采用的技术方案是,一种定时器的实现方法,其特征在于,包括以下步骤:
a.主线程创建定时器队列,并将定时器队列初始化,生成一个用来管理此队列的头结点,以便于对此定时器队列的各种操作;
b.用户线程创建软件定时器,初始化定时器参数;
c.主线程根据用户创建的软件定时器创建子线程,通过硬件时钟初始化软件时钟;
d.主线程根据用户创建软件定时器的操作,完成该定时器在队列中的注册,在此过程中进行队列操作共享锁的加锁操作,完成后解锁;
e.子线程按顺序轮巡队列中所有的用户自定义的定时器结点,利用select函数逐个判断其timer_remain_value计数器的值是否为0,若是则进入g步骤,若不是则进入f步骤;
f.对其timer_remain_value计数器进行减“1”操作,回到e步骤;
g.执行达到超时的定时器事件。
具体的,步骤b所述定时器参数包括定时器ID号、定时器超时时间、定时器离超时的剩余时间、定时器链表指针、定时器队列同步锁机制、定时器超时操作的事件。
进一步的,步骤g还包括以下步骤:
g1.根据用户选择判断该定时器功能是否还要继续使用,若是则进入g2步骤,若不是则进入g3;
g2.将其timer_remain_value计数器重新设为timer_max_value;
g3.在定时器队列中注销该定时器节点。
具体的,还包括以下步骤:
h.用户可随时在主线程中通过定时器ID号进行注销操作。
本发明的有益效果是,通过上述一种定时器的实现方法对定时器进行统一控制,对多个定时器管理清晰,方便软件模块的整体移植,且采用select函数能获取比较高的精度。
【具体实施方式】
下面结合实施例,详细描述本发明的技术方案。
本发明提供了一种定时器的实现方法,首先主线程创建定时器队列,并将定时器队列初始化,生成一个用来管理此队列的头结点,以便于对此定时器队列的各种操作,然后用户线程创建软件定时器,初始化定时器参数,主线程再根据用户创建的软件定时器创建子线程,通过硬件时钟初始化软件时钟,完成该定时器在队列中的注册,在此过程中进行队列操作共享锁的加锁操作,完成后解锁,子线程按顺序轮巡队列中所有的用户自定义的定时器结点,利用select函数逐个判断其timer_remain_value计数器的值是否为0,若是则执行达到超时的定时器事件,若不是则对其timer_remain_value计数器进行减“1”操作,回到子线程按顺序轮巡那一步。
实施例
本例采用本发明方案进行定时器的实现。
首先主线程创建定时器队列,并将定时器队列初始化,生成一个用来管理此队列的头结点,以便于对此定时器队列的各种操作,如添加,删除,清空等等,然后用户线程创建软件定时器,初始化定时器参数,定时器参数包括定时器ID号、定时器超时时间、定时器离超时的剩余时间、定时器链表指针、定时器队列同步锁机制、定时器超时操作的事件,主线程再根据用户创建的软件定时器创建子线程,通过硬件时钟初始化软件时钟,完成该定时器在队列中的注册,在此过程中进行队列操作共享锁的加锁操作,完成后解锁,子线程按顺序轮巡队列中所有的用户自定义的定时器结点,利用select函数逐个判断其timer_remain_value计数器地值是否为0,若不是则对其timer_remain_value计数器进行减“1”操作,回到子线程按顺序轮巡那一步,若是则执行达到超时的定时器事件,根据用户选择判断该定时器功能是否还要继续使用,若是则将其timer_remain_value计数器重新设为timer_max_value,若不是则在定时器队列中注销该定时器节点,用户可随时在主线程中通过定时器ID号进行注销操作。