VS2010/MFC MFC 常用类:定时器 Timer
来源:互联网 发布:rtmp嗅探器软件 编辑:程序博客网 时间:2024/05/01 12:29
**
定时器简介
**
定时器,可以帮助开发者或者用户定时完成某项任务。在使用定时器时,我们可以给系 统传入一个时间间隔数据,然后系统就会在每个此时间间隔后触发定时处理程序,实现周期 性的自动操作。例如,我们可以在数据采集系统中,为定时器设置定时采集时间间隔为 1 个 小时,那么每隔 1 个小时系统就会采集一次数据,这样就可以在无人操作的情况下准确的进 行操作。
**
MFC 定时器
**
VS2013 编程中,我们可以使用 MFC 的 CWnd 类提供的成员函数 SetTimer 实现定时 器功能,也可以使用 Windows API 函数 SetTimer 来实现。两者使用方法实际上很类似, 但也有不同。
CWnd 类的 SetTimer 成员函数只能在 CWnd 类或其派生类中调用,而 API 函数 SetTi mer 则没有这个限制,这是一个很重要的区别。因为本教程主要是讲解 MFC 编程,所以这 里就先重点讲解 MFC 定时器的用法.
1、启动定时器。
启动定时器就需要使用CWnd类的成员函数SetTimer。
CWnd::SetTimer的原型如下: UINT_PTR SetTimer( UINT nElapse, ( HWND, UINT, UINT_PTR, DWORD ));
参数 nIDEvent 指定一个非零的定时器 ID;参数 nElapse 指定间隔时间,单位为毫秒; 参数 lpfnTimer 指定一个回调函数的地址,如果该参数为 NULL,则 WM_TIMER 消息被发 送到应用程序的消息队列,并被 CWnd 对象处理。如果此函数成功则返回一个新的定时器 的 ID,我们可以使用此 ID 通过 KillTimer 成员函数来销毁该定时器,如果函数失败则返回 0。
通过 SetTimer 成员函数我们可以看出,处理定时事件可以有两种方式,一种是通过 W M_TIMER 消息的消息响应函数,一种是通过回调函数。
如果要启动多个定时器就多次调用 SetTimer 成员函数。另外,在不同的 CWnd 中可 以有 ID 相同的定时器,并不冲突
2、为 WM_TIMER 消息添加消息处理函数,或者定义回调函数。
如果调用 CWnd::SetTimer 函数时最后一个参数为 NULL,则通过 WM_TIMER 的消息 处理函数来处理定时事件。添加 WM_TIMER 消息的处理函数的方法是,在 VS2010 工程的 Class View 类视图中找到要添加定时器的类,点击右键,选择 Properties,显示其属性页, 然后在属性页工具栏上点击 Messages 按钮,下面列表就列出了所有消息,找到 WM_TIM ER 消息,添加消息处理函数。添加后,cpp 文件中会出现类似如下内容:
1. BEGIN_MESSAGE_MAP(CExample44Dlg, CDialogEx) 2. ...... 3. ON_WM_TIMER() 4. END_MESSAGE_MAP() 5. 6. void CExample44Dlg::OnTimer(UINT_PTR nIDEvent) 7. { 8. // TODO: Add your message handler code here and/or call def ault 9. 10. CDialogEx::OnTimer(nIDEvent); 11. }
之后就可以在 OnTimer 函数中进行相应的处理了。OnTimer 的参数 nIDEvent 为定时
器 ID,即在 SetTimer 成员函数中指定的定时器 ID,如果有多个定时器,我们可以像下面这 样处理:
1. void CExample44Dlg::OnTimer(UINT_PTR nIDEvent) 2. { 3. // TODO: Add your message handler code here and/or call def ault 4. switch (nIDEvent) 5. { 6. case 1: 7. // 如果收到 ID 为 1 的定时器的消息则调用 func1 函数 8. func1(); 9. break; 10. case 2: 11. // 如果收到 ID 为 2 的定时器的消息则调用 func2 函数 12. fun2(); 13. break; 14. ...... 15. default: 16. break; 17. } 18. 19. CDialogEx::OnTimer(nIDEvent); 20. }
如果调用 CWnd::SetTimer 函数时最后一个参数不为 NULL,则需要定义回调函数。回 调函数的形式如下:
C++代码
1. void CALLBACK EXPORT TimerProc( 2. 3. HWND hWnd, // handle of CWnd that called SetTimer 4. 5. UINT nMsg, // WM_TIMER 6. 7. UINT nIDEvent // timer identification 8. 9. DWORD dwTime // system time 10. 11. );
参数 hWnd 为调用 SetTimer 成员函数的 CWnd 对象的句柄,即拥有此定时器的窗口 的句柄;参数 nMsg 为 WM_TIMER,而且总是为 WM_TIMER;参数 nIDEvent 为定时器 I D;参数 dwTime 为系统启动以来的毫秒数,即 GetTickCount 函数的返回值。 这样 CWnd::SetTimer 函数最后一个参数就可以为 TimerProc。
销毁定时器。
不再使用定时器时,可以销毁它。销毁定时器需使用 CWnd 类的 KillTimer 成员函数, CWnd::KillTimer 函数的原型如下:
C++代码
1. BOOL KillTimer(UINT_PTR nIDEvent);
参数 nIDEvent 为要销毁的定时器的 ID,是调CWnd::SetTimer 函数时设置的定时器 ID。如果定时器被销毁则返回 TRUE,而如果没有找到指定的定时器则返回 FALSE。 如果要销毁多个定时器,则多次调用 KillTimer 函数并分别传入要销毁的定时器的 ID。
详细参考请见http://download.csdn.net/download/iflyme/9917838
- VS2010/MFC MFC 常用类:定时器 Timer
- VS2010/MFC编程入门 MFC常用类:定时器Timer)
- MFC常用类:定时器Timer
- MFC常用类:定时器Timer
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
- 转:VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
- MFC:定时器Timer
- 鸡啄米vc++2010系列43(MFC常用类:定时器Timer)
- VS2010 MFC Dialog设置定时器
- MFC中使用多个timer定时器
- MFC 中设置定时器Timer的方法
- (VS2010)MFC常用语句
- MFC TIMER
- VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)
- HDU6128Inverse of sum
- Oracle数据库exp与expdp方式导入导出时改变数据库表空间及用户信息
- caffe自定义神经层
- codeforces 24C 找规律
- Python 字符串函数
- VS2010/MFC MFC 常用类:定时器 Timer
- 「网络流 24 题」运输问题
- 任务进度规划(每日更新)
- 73. Set Matrix Zeroes
- setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&j,sizeof(j));
- 编译原理工具推荐
- numpy的安装
- 一张图读懂Java多线程
- easyUI的datagrid行号隐藏