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类中,调用就不用指定窗口句柄了,例如:
UINT SetTimer(1,100,NULL);
函数反回值就是第一个参数值1,表示此定时器的ID号。
第二个参数表示要等待100毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
1.2 调用回调函数
此方法首先写一个如下格式的回调函数
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。
二、多个定时器的实现与应用
我们在安装定时器时都为其指定了ID,使用多个定时器时,该ID就发挥作用了。
不使用MFC时,当接收到WM_TIMER消息,WPARAM wParam中的值便是该定时器的ID
使用MFC时就更简单了,我们为其增加WM_TIME的消息处理函数OnTimer即可,请看如下例子
void CTimerTestDlg::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 24: ///处理ID为24的定时器
Draw1();
break;
case 25: ///处理ID为25的定时器
Draw2();
break;
}
CDialog::OnTimer(nIDEvent);
}
当你用回调函数时,我们可以根据nTimerid的值来判断是哪个定时器,例如:
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
switch(nTimerid)
{
case 1: ///处理ID为1的定时器
Do1();
break;
case 2: ///处理ID为2的定时器
Do2();
break;
}
}
三、取消定时器
不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下
BOOL KillTimer(
HWND hWnd, // 窗口句柄
UINT_PTR uIDEvent // ID
);
在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。
如:KillTimer(1);
SetTimer函数总结相关推荐
- delphi中setTimer函数的用法
delphisetTimer函数用来做定时器,可以实现每隔一段时间运行某个程序,需要用到两个函数,SetTimer函数和KillTimer函数. 下面是一个简单的例子: var i :Integer ...
- windows中定时操作(SetTimer函数用法)
最近需要在服务端定时执行某个操作,于是需要用到SetTimer函数.当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间 ...
- vc中定时器的使用 (2)SetTimer函数的使用
什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...
- VC++中定时器SetTimer函数的应用总结
什么时候我们需要用到SetTimer函数呢?当你 需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...
- setTimer()函数详解
转自:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中,经常使用的一个事件.借助它可以产生定时执行动作 ...
- C++:MFC SetTimer定时执行某一函数;
1.函数说明: 函数原型: SetTimer这个API函数的原型 : UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID ...
- SetTimer的使用问题
SetTimer函数用于创建一个计时器,KillTimer函数用于销毁一个计时器.计时器属于系统资源,使用完应及时销毁. SetTimer的函数原型如下: UINT_PTR SetTimer( HWN ...
- 定时器:SetTimer
注:把编辑框属性设置为"只读" 什么时候我们需要用到SetTimer函数呢?当你需要"每个一段时间"执行一件事的的时候就需要使用SetTimer函数了.使用定时 ...
- MFC 定时器用法 SetTimer、KillTimer
什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...
- SetTimer和KillTimer详解
原文出处:http://www.cppblog.com/ivenher/articles/19969.html 在编程时,会经常使用到定时器.使用定时器的方法比较简单,通常告诉Windows一个时间间 ...
最新文章
- 【Unity教程】创建一个完整的驾驶游戏
- LeetCode实战:最小栈
- 第七篇:SpringBoot 2.x集成Lombok
- 【转】推荐两款富文本编辑器:NicEdit和Kindeditor
- php写入大文件内容_用PHP读取超大文件的实例代码
- 无招胜有招之Java进阶JVM(五)垃圾回收
- asynchttpclient 超时_DNF:95更新前还能免费获得一件超时空装备?但这个任务一定完成...
- 认识和选购极致画质的显示器
- 字典树从第i个构造HDU2846
- docker环境搭建redis-cluster集群(多台机器)
- sql 查询超时已过期_监视来自SQL Server代理作业的查询超时过期消息
- 单选框_flutter Radio 单选框
- C#获取数据库中某个字段的最大值
- 使用spring ioc基于纯xml配置模拟crud
- html绘制位图,Canvas 绘制位图图像 ImageBitmap
- 织梦cms安装完成后登录后台出现空白。主要原因是php版本的问题
- log4cpp乱码_log4cxx配置使用(一)
- D3D游戏关于窗口中如何精确确定鼠标位置的相关讨论
- 2022_WWW_Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
- 最新版Shiro-SpringBoot项目实战笔记
热门文章
- android6.0 Activity(四) Surface创建
- 排序算法-归并排序详细讲解(MergeSort)
- ug中文字大小设置_UG编辑文字怎么放大或缩小?
- 【笔记】人工智能 一种现代方法 人工智能 一种现代方法 第6章 用搜索树对问题求解
- 计算机运行命令定时关机,电脑定时关机命令 使用系统命令定时关机 - 云骑士一键重装系统...
- AE 2021最新最全插件滤镜大全一键安装版下载 After Effects 2021插件合集WIN一键安装版 支持AE 2021
- DB2报错原因汇总(sqlcode sqlstate)
- 全局光照算法:IBL
- Arcgis学习视频教程
- 基于163邮件服务器实现邮箱验证