当前位置:首页 > 编程学习 > SetTimer(), KillTimer() 使用

SetTimer(), KillTimer() 使用

编程学习2010-02-2367810

SetTimer函数的用法  


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);

  

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;
     } 
}


扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://www.apull.net/html/20100223133.html

分享给朋友:

相关文章

[转] 深入探讨C++中的引用

[转] 深入探讨C++中的引用

  摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面、透彻地阐述。  关键词:引用,const,多态,指针  引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。  引用简介  引用就是某一变量(目标)的一个别名,...

致面向对象技术初学者的一封公开信

致面向对象技术初学者的一封公开信

 致面向对象技术初学者的一封公开信 Alistair Cockburn 著(1996 年2 月),袁峰 译介绍 首先我要解释一下为什么会写这封公开信。这似乎已经成了一种习惯,但这个步骤还是需要的。过去6 年中, 我曾经无数次地在饭店、酒吧、旅店大厅等各种地方以同一种方式度过愉快而漫长的夜晚:和同样追求真理、光明和智慧的伙伴一起探讨面向对象的真谛。现在,我已经可以回答很多当年我遇到的问题。这些同样的问题也在困扰着我的一位新同事,在一家饭店里,我花了整整一个晚上和他讨...

ASP六大对象介绍

ASP六大对象介绍

Application对象 Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据。 Application的属性:  方法如下: Application对象没有内置的属性,但是我们可以自行创建其属性。 <% Application("属性名")=值 %>    其实大部分Application变量都 存放在Contents集合中,当你创建一个新的Application变量时,其实...

HTML与ASCII码表

HTML与ASCII码表

HTML与ASCII码表Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1  Latin alphabet No. 1Browser support: All browsersASCIIHTMLHTMLDecHexSymbolNumberNameDescription32333435363738394041424344454647202122232425262728292A2B...