windows程序设计读书笔记----------(计时器)

来源:互联网 发布:淘宝女装品牌代购 编辑:程序博客网 时间:2024/06/05 16:16

            windows计时器是一种输入设备,每隔指定时间都会产生一个消息WM_TIMER,消息被放在应用程序消息队列中。WM_TIMER消息的产生不像DOS系统一样通过截获时钟滴答的BIOS中断来实现的,而是设定一个数值,每一个时钟滴答,该值减一,直到为零,产生一个WM_TIMER消息。在windows 98上,计时器具有与底层计时器相同的55毫秒的周期,也就是说没55毫秒产生一个时钟滴答,而windows NT上,其为10毫秒。例如:当windows 98上设置的时钟间隔为1000毫秒时,也就是说讲18个时钟滴答产生一个计时器消息(WM_TIMER).   值得注意的是,当设置的时钟周期小于系统时钟滴答时,每个时钟滴答(55毫秒)都将产生一个计时器消息。

注:在同一时刻只能有一个WM_TIMER消息在消息队列中,且其优先级比较低。

使用计时器的三种方法:

方法一:

   SetTimer(hwnd,iTimerID,uniMescIerval,NULL);//产生计时器消息,并指定接受消息

   第一个参数:其为接受计时器消息的窗口句柄。

   第二个参数:其为计时器的ID,不能为0,不同计时器不同

   第三个参数:时间间隔  

   KillTimer(hwnd,iTimerID);//停止产生计时器消息

   其中第二个参数的值要与产生计时器的消息的计时器ID相同。  

   注:当需改变一个计时器的时间间隔时,可以再次调用WM_TIMER消息。

 

方法二:

 可以在SetTimer函数中指定接受计时器消息的“回调”函数。

 SetTimer(hwnd,iTimerID,iMsecInterval,TimerProc); 

 第一,二,三个参数与方法一相同,第四个参数为指定回调函数的函数名。

 回调函数的格式:

 VOID CALLBACK TimerProc(HWND hwnd, UINT message,UINT iTimerID,DWORD dwTime)

    {

           [处理过程]

     }//dwTimer是GetTickCount函数返回值,其记录了自从windows启动到现在已逝去的毫秒

KillTimer(hwnd,iTimerID);

 

方法三:

 iTimerID=SetTimer(NULL,0,wMsecInterval,TimerProc);

     如果iTimerID为0,表示没有计时器可以用。

 KillTimer(NULL,iTimerID);

    该方法很少用到。如果在程序中,需要在不同时刻调用多次SetTimer,但又不想记录那些计时器ID已经被使用过,那么这种方法可能会派上用场。

 

 获取时间:

      typedef struct  _SYSTEMTIME

     {

              WORD wYear;

               WORD wHour;

               WORD  wDayOfWeek;

               WORD   wDay;

               WORD    wHour;

               WORD  wMinute;

                WORD   wSecond;

                WORD    wMilliseconds;

       }SYSTEMTIME,*PSYSTEMTIME;

   其主要用于GetSystemTime(格林威治时间)和GetLocalTime(当地时间)函数。

     

 

       

原创粉丝点击