有关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 ,UINT ,DWORD))   当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字。nElapse指的是时间间隔,  也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,  也就是使用系统默认的回调函数,系统默认认的是onTime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:  在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。  每隔一段时间就会自动执行一次。 

 SetTimer计时器是系统资源,使用完毕应及时用KillTimer销毁,关于SetTimer的返回值:如果hWnd为NULL,返回值为新建立的timer的ID,如果hWnd非NULL,返回一个非0整数,如果SetTimer调用失败则返回0 ,简言之,SetTimer的返回值用于将来的销毁。

例1:

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

  }

例2:

for(int i = 0; i< 100000; i++)
{
  SetTimer(1,2000,NULL);
}
//如果这个循环运行时间远超过了这个二秒的定时器,是不是也要一直运行完这个循环后,再过两秒后才会进入OnTime()函数?

1。应该是这样的,设置定时器应该只要一次就够了,只要不KillTimer()。系统每隔2秒都会自动调用OnTimer()
2。如果来一次定时器消息对应的函数所需要的CPU工作时间会超过2秒的话,系统也会继续运行本次消息对应的函数,不管需要多长时间都会继续运行;当运行完成了本次定时器消息函数后,系统会立即调用下一次定时器消息,也就是实际的定时器消息间隔时间应该是定时器设置时间减去本次定时器消息函数执行所需要的时间,如果你的消息函数执行时间超过2秒的话,那么系统执行完本次函数后,就会立即执行下一次定时器消息,而基本不需要等待了

时间: 2024-08-27 17:16:40

有关SetTimer函数的用法的相关文章

SetTimer函数的用法

什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数 了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序.通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数. 1.1 用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 UINT_PTR SetTimer( HWND hWnd,          // 窗口句柄 UINT_PTR

delphi中setTimer函数的用法

delphisetTimer函数用来做定时器,可以实现每隔一段时间运行某个程序,需要用到两个函数,SetTimer函数和KillTimer函数.下面是一个简单的例子:vari :Integer = 0; procedure TimerProc(hwnd:HWND;uMsg,idEvent:UINT;dwTime:DWORD); stdcall;begininc(i);Form1.Caption := IntToStr(i);end; procedure TForm1.FormCreate(Sen

Settimer及回调函数的用法

在网上看了settimer的一些用法发现能用的真没有,,,,可能是我没找对地方,大部分都是无脑复制粘贴,浪费了很多时间,如果你是一个对这种定时器一无所知的小白,那么请你看进来一定不会让你失望的! 实用settimer的第一步引入头文件:#include <Windows.h> 然后我们来看一下settimer及其回调函数的使用: 首先我们来看settimer的原型:(如下所示)(这个仅仅是窗口的一个定时器函数,我们现在是想把它用到控制台程序的而一般没有窗口的线程系统是不会给他指定消息队列的)

mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) 说明: 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差.其结果的单位由interval 参数给出.interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同. mysql> SELECT TIMESTAMPDIFF(MONTH,'200

【转】oracle的substr函数的用法

[转]oracle的substr函数的用法 oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] ) 如:     substr('This is a test', 6, 2)     would return 'is'     substr('This is a test', 6)     would return 'is a test'     substr('TechOnThe

Oracle trunc()函数的用法

--Oracle trunc()函数的用法 /**************日期  TRUNC()函数没有秒的精确 ********************/ select sysdate from dual --当时日期 select trunc(sysdate) from dual select trunc(sysdate ,'DD') from dual --今天日期 select trunc(sysdate,'d')+7 from dual --本周星期日 select trunc(sys

C中的时间函数的用法

C中的时间函数的用法    这个类展示了C语言中的时间函数的常用的用法. 源代码: #include <ctime>#include <iostream> using namespace std; class MyTime{public:    MyTime() { mPTime = 0; mStLocalTime = 0; mStGMTTime = 0; }    ~MyTime() {}; //time_t time(time_t * timer) 返回自1970年1月1日00

嵌入式之---常用模板函数(用法说明函数、参数解析函数)

主要内容:嵌入式常用模板函数(用法说明函数.参数解析函数) /*显示参数列表*/ void usage() {     printf("usage: server [-p:x] [-i:IP] [-o]\n\n");     printf("       -p:x      Port number to listen on\n");     printf("       -i:str    Interface to listen on\n");

awk中split函数的用法

The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep. time=12:34:56 echo $time | awk '{split($0,a,":" ); print a[1]}' 12   echo $time | awk '{split($0,a,":" ); print a[3]}' 34   echo $time | awk