Windows:SetTimer定时器编程
摘要:
什么时候我们需要用到SetTimer函数呢?
当你需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。
Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码。
KillTimer用于停止计时器。 Settimer是设置,Ontimer是响应Settimer消息的。
函数:
头文件 #include<Windows.h>
(1)用WM_TIMER来设置定时器
先请看SetTimer这个API函数的原型
UINT_PTR SetTimer( HWND hWnd,//和定时器相关联的窗口 UINT_PTR nIDEvent,//一个非0的数字标志这个定时器 UINT uElapse,//指定时间间隔,以毫秒为单位 TIMERPROC lpTimerFunc//一般指定为null );
当在MFC的工程中如下:
UINT_PTR SetTimer( UINT_PTR nIDEvent,//一个非0的数字标志这个定时器 UINT uElapse,//指定时间间隔,以毫秒为单位 TIMERPROC lpTimerFunc//一般指定为null );
用法如下:
//@param:1 计时器的名称;
//@param: 1000 时间间隔,单位是毫秒;
//@param: NULL 使用onTime函数。
SetTimer(1,1000,NULL);
在每次时间到1s时会触发WM_TIMER消息,其消息响应函数如下:
void CXXX::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 // 此处加入如下代码就好了: switch(){ case 1: //做该做的事情 //当不需要的时候在此处调用KillTimer(1); break; default: break; } CDialog::OnTimer(nIDEvent); }
当不需要计时器的时候调用KillTimer(nIDEvent);
KillTimer(1);
(2)多个SetTimer的使用
SetTimer(2,1000,NULL);SetTimer(3,500,NULL);
WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码:
onTimer(nIDEvent){switch(nIDEvent){case 1:........;break;case 2:.......;break;case 3:......;break;}}
1.2 调用回调函数
此方法首先写一个如下格式的回调函数
void CALLBACK TimerProc
(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime
);然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。
1.3 取消定时器
不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下
BOOL KillTimer(HWND hWnd, // 窗口句柄UINT_PTR uIDEvent // ID
);在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。
如:KillTimer(1);
测试程序:
#include <iostream>
#include <Windows.h>using namespace std;void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nTimerid, DWORD dwTime)
{SYSTEMTIME sys;GetLocalTime(&sys);printf("M/d/d d:d:d.d xingqi \n", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);}void main()
{MSG msg;SetTimer(NULL, 230, 1000, (TIMERPROC)TimerProc);while (GetMessage(&msg, NULL, NULL, NULL)){if (msg.message == WM_TIMER){TranslateMessage(&msg);///TranslateMessage函数将虚拟键消息转换成字符消息/*该函数调度一个消息给窗口程序。通常调度从GetMessage取得的消息。消息被调度到的窗口程序即是MainProc()函数*/DispatchMessage(&msg);//break; //此处最好有一个这个,不然貌似Killtimer结束不了定时器的样子.}}KillTimer(NULL, 230);}
参考文章:
1. https://blog.csdn.net/u011555996/article/details/77587799
2. https://www.cnblogs.com/lingc/p/3380919.html
3. http://blog.sina.com.cn/s/blog_b74670be0102v5pr.html
4. https://www.cnblogs.com/ssyfj/p/8490468.html
Windows:SetTimer定时器编程相关推荐
- 寒江独钓-Windows内核安全编程(完整版).pdf
寒江独钓-Windows内核安全编程(完整版).pdf 编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件.硬件资源.因此,稍有不慎就有可能将系统变得不稳定.W ...
- C++-SetTimer定时器
1. SetTimer定时器 Windows定时器是一种周期性的消息产生装置,它会每隔一段指定时间发送一次定时消息WM_TIMER.它是一个很重要的系统消息,当系统所设置的时间到达以后,系统就会自动发 ...
- VS2022 VC++下控制台程序SetTimer定时器的应用
在Vs2022下,应用VC++控制台程序,SetTimer定时器的应用,在很多的介绍例程当中,都使用了 SetTimer(NULL, TimerID, peried, TimerProc); 但是当这 ...
- (C#)Windows Shell 外壳编程系列6 - 执行
(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列5 - 获取图标 执行 许多人都知道 ShellExecute ,用于执行 ...
- Windows 外壳扩展编程入门实例
Windows 外壳扩展编程入门实例 -- Delphi 篇 作者的话 关于Windows 外壳扩展方面的文章私心以为最好的应当算是Michael Dunn 的TheComplete Idiot's ...
- [补] windows C socket编程——大物实验预约
注 : 心血来潮,想着把这两年没能记录下来的经历,写一波回忆杀.诚然,有些经历十分复杂繁琐,希望能耐下性子,写出好文章来,可惜一时不能全想起来这两年来的种种,就想起来什么便写什么吧. 时间估摸着是大一 ...
- (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单 上一节说到如 ...
- windows下socket编程GetLastError()函数返回结果与对照表-转
原文地址:http://blog.sina.com.cn/s/blog_4880c4bb0100b6a5.html WSAGetLastError()函数返回结果与对照表: Windows Socke ...
- 视频教程-精通Win32 API编程-Windows图形界面编程-C/C++
精通Win32 API编程-Windows图形界面编程 黄强老师,国家软件设计师,软件开发工程师,项目经理.产品经理.培训讲师. 创业合伙人,多年C.C++开发经验,尤擅长移动互联网项目的开发! 黄强 ...
最新文章
- QIIME 2教程. 24Python命令行模式Artifact API(2020.11)
- keil调用bat文件,实现删除、复制、加密文件功能
- PopupWindow的使用
- 不用SE11建Structure传Internal Table到Smartforms的方法
- unity3d 各个目录的意思
- ASP.NET MVC Global.cs - 应用程序事件
- IPv6名称到地址的转换函数getaddrinfo()详解
- JEP 290 初识
- 项目实战 五 拟合直线 获得中线
- html css手册,CSS 参考手册
- 【作图】origin制作图中图
- 大学计算机基础教程期末试题,大一大学计算机基础教程期末考试卷试题 .doc
- 删除IBM常见软件进程释放系统资源
- 【JAVA】五子棋2.0
- CQOI2016滚粗记
- srsLTE学习笔记(一)——eNB配置文件enb.conf解析
- 计算机毕业设计ssm青岛恒星科技学院机房管理系统0k0u9系统+程序+源码+lw+远程部署
- [ACNOI2022]《普林斯普的荣光》
- 微信小程序 全面屏适配
- JetBrains Mikhail Vink:助开发者Keep Evolving