870920 Menu

计时器类详解(Timer与MultiTimer等)

Timer计时器是一个抽象基类,可不间断的执行某些代码或回调。计时器的用途非常广泛,内部原理是后台开辟一个新线程,在该线程上不停的调用本类的timerCallback()函数。使用计时器的步骤有三:

1、要使用计时器的类(内容组件)继承Timer类,通常为实现式继承,即private继承:

2、内容组件类中,适当位置启动和停止计时器,通常在构造函数的最后启动计时器:

3、实现Timer类的纯虚函数 timerCallback()
在该函数中完成需不间断运行的代码,比如repaint()本组件的操作界面,修改文本标签的显示内容,不断修改某些数据成员的值,不断调用某些方法,等等。

Timer类其它成员函数:
 isTimerRunning () 检测计时器是否已启动
 getTimerInterval () 返回计时器回调的间隔时间,该时间由最近一次调用startTimer()时所设置

MultiTimer 多重计时器

与Timer几乎完全一致,MultiTimer可在某个内容组件中同时运行多个计时器,每个计时器均有唯一性的ID,这些计时器共享一个timerCallback()回调函数,但以不同的间隔时间来回调。而timerCallback()的参数为计时器ID,函数内基于参数ID执行不同的代码(通常使用switch结构)。如果某个内容组件需使用不同的间隔时间不间断地执行多个代码块,那么使用MultiTimer是最合适的。

MultiTimer的成员函数原型与Timer基本一致,但每个函数均多了一个ID参数(计时器的编号)。

HighResolutionTimer 高精度计时器

Timer和MultiTimer均由消息线程所调用,这意味着计时器回调有可能被阻塞,导致回调间隔不精确。如需精确的计时回调,可使用HighResolutionTimer高精度计时器类。该类的用法与Timer一致,不同处:

 高精度计时器的回调函数为hiResTimerCallback(),而不是timerCallback()。
 高精度计时器属于重量级的类,资源占用和成本均高于Timer类(本类的计时回调由系统级线程来负责)。
 大多数情况下,使用Timer执行计时回调已足够,不是非常必要的前提下,没必要动用高精度计时器。