Windows计时器是一个非常有用的编程元素,而且计时器的使用非常简单,我们只需要一个时间间隔参数来调用SetTimer函数设置和启动计时器,通过WM_TIMER消息的响应函数进行计时器控制,调用KillTimer函数停止计时器。
但是由于Windows是一个非实时操作系统,所以如果我们定义的时间间隔小于100ms的时候,计时器可能不会很准确。所以,对于有些时间要求比较高的情况,我们需要使用多媒体高精度计时器来完成计时,它的精度可以达到1ms。
下面结合实例详细讲述计时器和多媒体高精度计时器使用方法(完整实例可在我的CSDN资源中下载:[http://download.csdn.net/detail/margin1988/8328525](http://download.csdn.net/detail/margin1988/8328525))
⑴ 普通计时器的使用方法:
1> 在.h文件中添加计时器和消息响应函数:
~~~
int m_time;//计数器编号
afx_msg void OnTimer(UINT_PTR nIDEvent);
~~~
2> 在.cpp文件中添加WM_TIMER的消息响应宏:
~~~
int m_count=0;//计时全局计数变量
BEGIN_MESSAGE_MAP (CPoint21Dlg, CDialog)
ON_WM_TIMER() //WM_TIMER消息响应宏
END_MESSAGE_MAP ()
~~~
3> 启动计时器:
~~~
m_count = 0;
m_time = SetTimer(1,1000,NULL);
ASSERT (m_time != 0);
for (int i=0;i<10000;i++){
//uses up CPU cycles
}
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
~~~
4> 计数控制:
~~~
void CPoint21Dlg::OnTimer(UINT_PTR nIDEvent){
m_count++;
}
~~~
5> 停止计时器:
~~~
KillTimer (m_time);
~~~
(2) 多媒体高精度计时器的使用方法:
1> 包含相关头文件和库:
~~~
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
~~~
2> 设置并启用多媒体计时器:
~~~
int m_acc=0;//全局计数变量
static UINT m_nTimerID=0;//多媒体计数器编号
//自定义配置及启动多媒体计数器函数
void CPoint21Dlg::MultimediaTimer(){
TIMECAPS tc;
//获得定时器分辨率
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR){
return;
}
UINT nResolution = min(max(tc.wPeriodMin, 1), tc.wPeriodMax);
UINT nInterval = 1;
if (nInterval < nResolution){
nInterval = nResolution;
}
//设置定时最小分辨率
timeBeginPeriod(nResolution);
//设置定时器
m_nTimerID = timeSetEvent (4, nResolution,
CPoint21Dlg::CallBackFuncTimer,(DWORD)this, TIME_PERIODIC);
}
~~~
3> 计数控制:
~~~
void CALLBACK CPoint21Dlg::CallBackFuncTimer(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2){
m_acc++;
}
~~~
4> 停止多媒体计时器:
~~~
timeKillEvent (m_nTimerID);
~~~
- 前言
- VC++中自定义热键及响应
- CFileDialog文件对话框
- VC++中客户区保存为BMP图片
- VC++读、写注册表
- VC++播放音频文件和音频数据的方法
- VC++调用Matlab编写的DLL(混合编程)
- VC++中文件读、写和其他相关操作汇总
- VC++获取系统当前时间
- VC++按钮控件字体设置
- VC++软件界面风格简单美化
- VC++中一些常用的数据类型之间的相互转化
- VC++中截取字符串的方法
- VC++中vector矢量的使用方法及随机相关
- VC++中结构体的定义及使用
- VC++中List Control控件的使用方法介绍
- VC++中窗口过程函数及其消息发送、响应机制介绍
- VC++中Ribbon编程架构及SDI架构多视图切换介绍
- 串口通信基础知识及VC++实现
- VC++中单个键盘按键的响应
- VC++中的计时器及多媒体高精度计时器
- VC++编写DLL导出函数及其调用方法
- VC++对话框(CDialog)的全屏显示及控件居中显示
- VC++对话框(CDialog)添加背景图片
- VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法
- VC++对Access数据库的操作(查询、插入、更新、删除等)