Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32260
  • 博文数量: 8
  • 博客积分: 171
  • 博客等级: 入伍新兵
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-26 00:21
文章分类

全部博文(8)

文章存档

2012年(1)

2011年(7)

我的朋友

分类: C/C++

2012-01-07 23:54:28

在应用中经常会大量使用Timer来执行周期性的指令,在MFC中,timer的使用非常简单。在你拥有一个窗口对象时,就可以用它来创建一个Timer,并在相应的timer时间周期设定时做出程序设计中的响应。

Timer生命周期中涉及到以下方法:
  1. ON_WM_TIMER()
  2. void SetTimer(UINT_PTR nIDEvent, UINT uElapse, void (__stdcall *lpfnTimer(HWND, UINT, UINT_PTR, DWORD)));
  3. void KillTimer(UINT_PTR nIDEvent);
  4. void OnTimer(UINT nIDEvent);
SetTimer方法通过某个定义的event值(nIDEvent),经过uElapse毫秒,发生一次timer事件,要求在OnTimer方法中响应。在SetTimer方法成功后,timer开始计时生效。
KillTimer方法用来停止某timer,调用之后OnTimer将停止收到该timer的事件。
OnTimer是所有timer事件的响应方法。因为它是响应了所有的timer事件,所以可以通过以上API来实现多个并发的timer。

举个简单的例子,你希望每分钟调用一次funcA(),每秒种调用一次funcB(),那相应的实现为:
  1. // 定义message map
  2. BEGIN_MESSAGE_MAP (CMyDlg, CDialog)
  3.     ON_WM_TIMER()
  4. END_MESSAGE_MAP()

  5. // 定义两个timer事件,以及每个事件的发生时间间隔。

  6. const UINT ID_TIMER_MINUTE = 0x1001;
  7. const UINT ID_TIMER_SECOND = 0x1002;

  8. const UINT MINUTE_ELAPSE = 60*1000;
  9. const UINT SECOND_ELAPSE = 1000;

  10. // 启动timer
  11. void CMyDlg::StartTimer()
  12. {
  13.     SetTimer(ID_TIMER_MINUTE, MINUTE_ELAPSE, NULL);
  14.     SetTimer(ID_TIMER_SECOND, SECOND_ELAPSE, NULL);
  15. }

  16. // 线束timer
  17. void CMyDlg::StopTimer()
  18. {
  19.     KillTimer(ID_TIMER_MINUTE);
  20.     KillTimer(ID_TIMER_SECOND);
  21. }

  22. // timer响应函数
  23. void CMyDlg::OnTimer(UINT nIDEvent)
  24. {
  25.     switch(nIDEvent) {
  26.         case ID_TIMER_MINUTE:
  27.             funcA();
  28.             break;
  29.         case ID_TIMER_SECOND:
  30.             funcB();
  31.             break;
  32.         default:
  33.             break;
  34.     }
  35. }

阅读(11463) | 评论(0) | 转发(0) |
0

上一篇:HTML 5的本地存储

下一篇:没有了

给主人留下些什么吧!~~