VC中实现毫秒定时器

最爱闪亮小子

最爱闪亮小子

2016-02-19 12:59

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐VC中实现毫秒定时器,希望大家看完后也有个好心情,快快行动吧!

很久之前就想给Vckbase写点什么东西了,毕业至今,在vckbase中学了不少东西,也拿了不少代码,今天决定要回报一下,不管老婆呆会会不会拧我耳朵了。

毫秒定时器,为什么要使用毫秒定时器呢?我想原因有两个。第一:CWnd里面的timer不能精确到毫秒级,所以必须要写一个精确到毫秒级的。第二:用CWnd里面的timer代价太大,因为有时我们的类根本就没有窗口,为了使用timer,而不得不从CWnd里派生。本人写的这个mmtimer,主要是为了解决上面这两点而设计的。

再加上,这段时间看了一下设计模式,所以基本上这些代码是我这几个月来设计模式的总结,如果写得不好,敬请各位大虾指教。

运行结果如下:

VC中实现毫秒定时器
图一 毫秒定时器

好了我们先来看看实现毫秒定时器的关键技术吧。其实异常的简单,主要用到如下几个函数,(见代码中CMMTimers)

1) timeGetDevCaps,得到当前计算机的时间精度。

2) timeBeginPeriod,设定当前定时器的精确度。例如设定为5,表示误差不会大于5毫秒。

3) timeEndPeriod. 跟2相对应,结束了定时精度.

(其实我的这些代码中有没有这三个函数,效果也是一样的)

4) timeSetEvent(...pfn...).开始定时,该函数中,有一个参数时回调函数指针,以及回调函数的参数,我的代码中是internalTimerProc,

和m_Recoder[MMRecoder::nRes](该参数指明定时器ID,一个CMMTimers的指针)

5)timeKillEvent.终止定时器。

如果对上述函数不理解也没关系,我已经把它们封装成一个类了,对了就叫CMMTimers.

为了使你不必去理解上述这些函数,我作出封装,CMMTimers主要有如下几个函数接口:

1)bool stopTimer(int nTimerID) 作用跟KillTimer(int nTimerID) 一样.

2)bool startTimer(UINT period,CTimerListener *pListener = NULL,int nTimerID = 1,bool oneShot = FALSE);相当于SetTimer(int nTimerID).

nTimerID,就是定时器ID,oneShot就是是否只运行一次,你可能会说CTimerListener是个什么东西,这个下面我再解释。

3)stopTimer(),关闭所有定时器。

4)timerProc()定时响应函数。相当于OnTimer.

说到这里的时候,其实我们现在就可以用这个类了,只不如果我不说CTimerListener是个什么东西,你始终会觉得纳闷。好吧,让我画个UML图好了。

VC中实现毫秒定时器
图二 毫秒定时器 UML图

有了UML图之后,知道CTimerListener是个抽象接口了吧,什么?UML图看不懂?回去看书去,俺可没这个义务教你看UML图呀。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

来到这里你就已经知道,只要CtestMMTimerDlg调用StartTimer(),StopTimer(),以及重载OnMMTimer()就OK了,其用法与SetTimer,KillTimer,OnTimer是一样的。

这里CtestMMTimerDlg,的基类是CDialog,而CDialog的基类是CWnd纯属巧合,它其实可以是任何的类,如CStudent,等完全没有窗口的类。

自己看代码吧。如果觉得有何不妥之处请与我联系。

结束语:又一次,老婆在等我完成工作中睡着了.....当程序员的老婆,有时真是惨。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

VC中实现毫秒定时器

编程语言 网络编程
VC中实现毫秒定时器

基于Android中实现定时器的3种解决方法

编程语言 网络编程
基于Android中实现定时器的3种解决方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

网页之定时器详解

ASP
网页之定时器详解

高手进阶Linux系统中内核定时器的应用

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
高手进阶Linux系统中内核定时器的应用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在B/S系统中引入定时器的功能

ASP
在B/S系统中引入定时器的功能

如何关闭win7唤醒定时器

电脑网络
如何关闭win7唤醒定时器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Windows 8中IE10打开后闪退

Windows 8中IE10打开后闪退

Win8系统设置开启公用文件夹共享图文方法

Win8系统设置开启公用文件夹共享图文方法
下拉加载更多内容 ↓