什么时候我们需要用到SetTimer函数呢?当你需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数

了。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通

常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。
  
1.1 用WM_TIMER来设置定时器

先请看SetTimer这个API函数的原型

UINT_PTR SetTimer(


  HWND hWnd,          // 窗口句柄


  UINT_PTR nIDEvent,      // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器


  UINT uElapse,         // 时间间隔,单位为毫秒


  TIMERPROC lpTimerFunc     // 回调函数


);

例如  


SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器

在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了

于是SetTimer函数的原型变为: 
 
UINT SetTimer(


  UINT nIDEvent,


  UINT nElapse,


  void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)


)  


  当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字,

nElapse指的是时间间隔 ,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数 ,在这个函数里,

放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函

数。 这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:在ClassWizard里,选择需要计时器

的类,添加WM_TIME消息映射,就自动生成onTime函数了 。然后在函数里添加代码,让代码实现功能。每隔一段

时间就会自动执行一次。

例:

SetTimer(1,1000,NULL); 
 
1:计时器的标识;

1000:时间间隔,单位是毫秒; 
 
NULL:使用onTime函数。 
 
当不需要计时器的时候调用KillTimer(nIDEvent); 
  
例如:KillTimer(1); 
 
1.2 调用回调函数

此方法首先写一个如下格式的回调函数(在SetTimer函数表示回调函数TIMERPROC不为空时,需要调用自定义的

回调函数 )

void CALLBACK TimerProc(


  HWND hWnd,


  UINT uMsg,


  UINT idEvent,


  DWORD dwTime


);

然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。

如果要加入两个或者两个以上的timer怎么办?

继续用SetTimer函数吧,上次的timer的ID是1,这次可以是2,3,4。。。。 
 
SetTimer(2,1000,NULL);

SetTimer(3,500,NULL);

嗯,WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码: 

 
onTimer(nIDEvent)  


{  


  switch(nIDEvent)  


  {  


   case 1:..;  


       break; 

 
   case 2:..;  


       break; 

 
   case 3:..;  


       break;  


  
}

}
 
   在使用定时器时注意SetTimer中表示定义时标识的nIDEvent参数,以及OnTimer或自定义的回调函数中

nIDEvent参数,还有KillTimer中的这个参数,如果要用它们对特定的定时器进行操作时,注意保持它们的一致。

MFC——SetTimer函数的用法相关推荐

  1. delphi中setTimer函数的用法

    delphisetTimer函数用来做定时器,可以实现每隔一段时间运行某个程序,需要用到两个函数,SetTimer函数和KillTimer函数. 下面是一个简单的例子: var i :Integer ...

  2. C++:MFC SetTimer定时执行某一函数;

    1.函数说明: 函数原型: SetTimer这个API函数的原型 : UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID ...

  3. windows中定时操作(SetTimer函数用法)

    最近需要在服务端定时执行某个操作,于是需要用到SetTimer函数.当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间 ...

  4. vc中定时器的使用 (2)SetTimer函数的使用

    什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...

  5. VC++中定时器SetTimer函数的应用总结

    什么时候我们需要用到SetTimer函数呢?当你 需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...

  6. c语言memcpy是什么,C语言memcpy函数的用法

    介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...

  7. MFC总结之CListCtrl用法及技巧(二)

    续第一篇:MFC总结之CListCtrl用法及技巧(一) http://blog.csdn.net/zwgdft/article/details/7560592 本篇重点介绍:禁止拖动表头.让第一列居 ...

  8. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  9. Python assert断言函数及用法

    Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...

  10. python中的counter()、elements()、most_common()和subtract()函数的用法

    python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...

最新文章

  1. Django缓存和信号
  2. webmin下重启linux系统
  3. 反垃圾邮件网关市场分析
  4. 比较两个日期大小和获取当前月最大天数的存储过程
  5. codeproject上的一款分页控件
  6. numpy——mgrid
  7. coreos 安装mysql_如何执行CoreOS Linux的裸机安装
  8. iSCSI又称为IP-SAN
  9. python统计表中单词及其出现的次数 字典形式输出_统计字符串中字母出现的次数,字典形式输出(python)...
  10. FileStream StreamWriter StreamReader BinaryReader
  11. 学成在线项目学习前端bug npm run dev运行报错 error in ./src/App.vue error in ./src/components/HelloWorld.vue问题
  12. 单元测试1-为什么需要单元测试
  13. 学校计算机采购清单表,附表:采购清单明细表.doc
  14. python plt 内存_python-创建matplotlib图形后如何释放内存
  15. 双非本科的大厂暑假实习之旅
  16. iOS UIAppearance使用详解
  17. 英语单词词性顺口溜_巧记英语单词的顺口溜 这样记忆不枯燥
  18. 【原创】Jlink在ADS下的配置说明及常见问题解决办法
  19. 使用express脚手架创建项目
  20. 【C#】调用Bartender进行打印

热门文章

  1. 分享NI卸载工具(免费)
  2. 修改tomcat日志打印位置
  3. 音频编辑软件有哪些?推荐几款简单的音频编辑软件
  4. Graph Embedding:Node2Vec
  5. 网络安全——C段扫描
  6. Windows7系统的70个小技巧
  7. 基于微信小程序的考勤打卡系统
  8. fluent瞬态计算终止条件在哪里设置_基于商用软件FLUENT的LES(大涡模拟)计算教学...
  9. DB2数据库错误代码大全
  10. win10多合一原版系统_win10多合一系统制作方法详解