什么时候我们需要用到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 调用回调函数

此方法首先写一个如下格式的回调函数

void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,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;

}

}

MFC 定时器的实现开始/暂停功能

最近遇到关于定时器的使用问题,在网上也搜索了很多相关资料。 其中都是讲了使用SetTimer 和 KillTimer。

我的是基于对话框的工程。

在OnInitDialog()里面添加定时器。

BOOL CMonitorProcessDlg::OnInitDialog()

{

SetTimer(1,3000,NULL);  //第一个参数可以自己设置是定时器的ID,第二个参数是间隔时间(毫秒为单位的)

}

当然别忘记添加当然别忘记添加当然别忘记添加当然别忘记添加WM_TIMER消息OnTimer()

然后我定义了2个全局变量

int nPress = 0; //用于联合判断“启动”按钮的按下状态

BOOL bStatic = FALSE; //用于判断程序是否在执行,以便KillTimer()

例如按下按钮之后,显示“”

void CMonitorProcessDlg::OnBnClickedButtonStart()

{

MessageBox(" 111111 ");

nPress++;       bStatic = TRUE;

}

在OnTimer()函数里面添加代码。

void CMonitorProcessDlg::OnTimer(UINT_PTR nIDEvent)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

if (nIDEvent ==1 && nPress ==1)

{

OnBnClickedButtonStart();   nPress --;

}

if (bStatic == TRUE)

{

KillTimer(1);

}

CDialog::OnTimer(nIDEvent);

}

MFC 定时器用法 SetTimer、KillTimer相关推荐

  1. MFC定时器SetTimer

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

  2. 用MFC中的SetTimer、OnTimer和KillTimer实现的简单计时器与倒计时的Demo

    MFC中的定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 简单的说,Settimer是设置一个计时器,当Settimer设置的时间到了,就会 ...

  3. MFC 定时器使用方式

    MFC 定时器使用方式 2011-04-30 12:24:58|  分类: 默认分类 |  标签: |字号大中小 订阅 用SetTimer函数 创建定时器 参数1表示定时器的ID,参数2表示时间间隔, ...

  4. 定时器:SetTimer

    注:把编辑框属性设置为"只读" 什么时候我们需要用到SetTimer函数呢?当你需要"每个一段时间"执行一件事的的时候就需要使用SetTimer函数了.使用定时 ...

  5. C++ 定时器的用法:SetTimer和Ontimer

    摘要: Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码. KillTimer用于停止计时器. Settimer是设置,Ontimer是响应S ...

  6. MFC定时器Timer的使用

    mfc的定时器功能,可以让程序周期性的执行一些功能.如定时采集数据,刷新界面等.我认为的好处,就是避免了使用多线程去实现那些功能.从而使编程变得更加的简单和可靠 下面介绍如何使用定时器Timer 新建 ...

  7. Qt中两种定时器用法

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObj ...

  8. Javascript的setTimeOut()和setInterval()的定时器用法

    Javascript用来处理延时和定时任务的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请 ...

  9. js 定时器用法详解——setTimeout()、setInterval()、clearTimeout()、clearInterval()

    写在前面: 在js应用中,定时器的作用就是可以设定当到达一个时间来执行一个函数,或者每隔几秒重复执行某段函数.这里面涉及到了三个函数方法:setInterval().setTimeout().clea ...

最新文章

  1. C#日期格式精确到毫秒 !!
  2. Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三
  3. TCP/IP(五):TCP 协议详解
  4. ASP.NET Core ---日志
  5. php 303,HTTP 的重定向301,302,303,307(转)
  6. android adb 静默安装,Android_如何静默安装
  7. Quartz教程:快速入门
  8. 鼠标自动点击脚本_613个主流网站中发现点击劫持脚本
  9. python wxpython backend wxagg_在wxPython中使用draw()(复制轴)绘制不正确
  10. Java帮助文档的生成
  11. 象棋名手手机版2019最新版_象棋名手
  12. python 颜色大全
  13. 计算机故障升温降温法,电脑故障排除1000例
  14. sap 服务器文件 暴露pdf地址,访问地址预览
  15. VS code react插件快捷键
  16. 实现导出excel,pdf功能
  17. 我是如何创建学校免费上网账号上网的
  18. 《大道至简》,悟在天成——读后有感
  19. linux 进程 ldt,LInux 描述符GDT, IDT LDT结构定义
  20. EF CodeFirst 必须要解决的问题

热门文章

  1. php获取控制器返回,从php中的mvc控制器方法返回一个json值
  2. mongodb存list_查询 MongoDB 子文档的 List 字段
  3. linux xlib函数手册,Xlib 学习笔记
  4. selenium java 断言_Java+Selenium+Testng自动化测试学习(三)— 断言
  5. nginx php实例,多个mysql,nginx,php实例环境安装zabbix(完全自定义)
  6. python生成api文档_Django 自动生成api接口文档教程
  7. php中nodethirtythree,node常用模块 - LinearLaw的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 高压电是以交流,还是直流方式输送?
  9. 用GD32替代STM32,是什么体验?
  10. VHDL-std_logic_vector转换为integer注意