文档章节

WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 573
阅读 59
收藏 0
//创建定时器函数的声明:
SetTimer(
  hWnd: HWND;               {与定时器相关联的窗口句柄}
  nIDEvent: UINT;           {指定一个非 0 的定时器标识符}
  uElapse: UINT;            {指定间隔时间, 单位是毫秒}
  lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数的指针}
): UINT;                    {返回定时器标识符; 失败返回 0}

//移除定时器函数的声明:
KillTimer(
  hWnd: HWND;    {与定时器相关联的窗口句柄}
  uIDEvent: UINT {定时器标识符}
): BOOL;

//处理 WM_TIMER 消息的回调函数的格式:
TimerProc(
  hWnd: HWND;    {与定时器相关联的窗口句柄}
  uMsg: UINT;    {WM_TIMER 消息}
  idEvent: UINT; {定时器的标识符}
  Time: DWORD    {以世界时间公约格式(UTC)指定的系统时间}
);               {这是个过程, 无返回值}

 
 
 
 
 

 

 

  
应该先理解一下再举例:

SetTimer 的参数1: hWnd, 一般指定 Self.Handle 就可以了;

SetTimer 的参数2: nIDEvent 是某个定时器的标识符, 说明可以创建若干个定时器, 随便给个正整数即可;

SetTimer 的参数3: uElapse, 这相当于 VCL 中 Timer 类的 Interval 属性;

看来参数 1-3 还是非常简单, 不好理解的就是参数4: lpTimerFunc, 这是一个过程的地址.

任意一个过程的地址吗? 当然不是; 这个过程的参数结构是 Windows 系统规定的, 我们必须按规定去定义这个过程; 即使你用不到其中的参数也必须如此.
//举例:
var
  i: Integer;

//先定义回调函数
procedure MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
begin
  Form1.Text := IntToStr(i);
  Inc(i);
end;

//创建定时器
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetTimer(Handle, 1, 10, @MyTimerProc); {每 1/100 秒调用一次 MyTimerProc}
end;

//删除定时器
procedure TForm1.Button2Click(Sender: TObject);
begin
  KillTimer(Handle, 1); {创建时指定的定时器标识是 1, 这里必须要一致}
end;

 
 
 
 
 

 

 

  
//如果回调过程是窗体类的一个方法, 需要这样: var i: Integer; //先定义回调函数 procedure TForm1.MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD); begin Text := IntToStr(i); Inc(i); end; //创建定时器 procedure TForm1.Button1Click(Sender: TObject); begin SetTimer(Handle, 1, 10, @TForm1.MyTimerProc); {每 1/100 秒调用一次 MyTimerProc} end; //删除定时器 procedure TForm1.Button2Click(Sender: TObject); begin KillTimer(Handle, 1); {创建时指定的定时器标识是 1, 这里必须要一致} end;

本文转载自:http://www.cnblogs.com/del/archive/2008/02/16/1070649.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
VC++ WM_TIMER 定时器使用方法

在编程时,会经常使用到定时器。使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定...

文艺小青年
2017/06/01
0
0
C++ 定时器的用法:SetTimer和Ontimer

SetTimer函数的用法 1)用WMTIMER来设置定时器 先请看SetTimer这个API函数的原型 UINTPTR SetTimer( HWND hWnd,//和定时器相关联的窗口 UINT_PTR nIDEvent,//一个非0的数字标志这个定时器 UI...

吃一堑消化不良
2015/11/17
0
0
【Visual C++】游戏开发笔记之七——基础动画显示(一)定时器的使用

本系列文章由zhmxy555编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7343337 作者:毛星云 邮箱: happylifemxy@qq.com 欢迎邮件交流编程心得 定时器的使用 定时器...

长平狐
2012/11/12
184
0
MFC屏幕录制程序编写

源代码:http://download.csdn.net/detail/nuptboyzhb/4136686 新增头文件及全局变量: #include//数学函数库的头文件 #include//增加AVI视频处理函数的头文件 #pragma comment(lib,"Vfw32.l...

长平狐
2012/10/08
1K
0
MFC定时器的使用

参考:http://www.cnblogs.com/chengxuyuancc/archive/2012/06/08/2542269.html MFC提供了3个定时器函数来完成有关定时器功能: 参数说明: UINT nIDEvent:定时器的ID,给定时器唯一的身份验证...

长平狐
2013/03/19
86
0

没有更多内容

加载失败,请刷新页面

加载更多

网站老被劫持快照跳转怎么办

最近很多公司的网站被劫持跳转到了bo彩、cai票网站上去,客户从百度点击进去会跳转,直接输入网站的域名不会跳转,网站快照也被劫持成bo彩的内容,site查看网站在百度的收录也出现问题,收录...

网站安全
13分钟前
1
0
给自己灌鸡汤

前言 看极客时间的《数据结构与算法之美》,中间有一篇文章是在说怎么坚持学习的,摘抄一些片段过来,激励自己。 https://time.geekbang.org/column/article/69607 致使你掉队的原因 一个人在...

grace_233
15分钟前
1
0
如何在网络视听行业建一扇内容安全大门?

在人工智能飞速发展的三年里,整个网络视听产业数字化发展速度非常迅猛。大数据作为如今这个时代的产物,正不断推动整个产业的发展。网络视听行业中存在海量的数据,比如视频内容、视频浏览量...

阿里云官方博客
25分钟前
1
0
云安全简史

课程介绍: DT时代我们每个人的生活在不知不觉中与云计算发生了千丝万缕的联系,起床、吃饭、出行、社交、工作、娱乐、购物等大多数应用都在云上,然而安全事件频发时刻在为我们敲响警钟,面对...

mcy0425
26分钟前
2
0
数字IT基础-数据采集总线

摘要: 日志服务是阿里自产自用的产品,在双十一、双十二和新春红包期间承载阿里云/蚂蚁全站、阿里电商板块、云上几千商家数据链路,每日处理来自百万节点几十PB数据,峰值流量达到每秒百GB,...

阿里云云栖社区
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部