windows程序设计——计时器

计时器在Windows系统中被视为一种输入设备,通过系统计时数和硬件tick信号工作。当计时到达预设时间,WM_TIMER消息被添加到消息队列,由getmessage获取并dispatch到相应窗口。定时器为系统资源,需通过KillTimer API配对使用以释放资源,防止消息队列中残留WM_TIMER消息。
摘要由CSDN通过智能技术生成

可能不是很直观,但计时器确实算的上一个输入设备。当设置了一个定时器是,系统设置一个计时数,由windows系统接收到硬件的tick信号将计时数减去一定值,当减少到0时,系统在程序的消息队列中加入一条WM_TIMER消息。因此timer消息是个同步消息,与鼠标与键盘的输入一样通过getmesssage获取到消息之后在dispatch到对应的窗口中。定时器还是一种系统资源,若不再需要需要释放。故一下两个API成对使用,调用KillTimer时会清除掉消息队列里边的所有对应的WM_TIMER消息。

//设置定时器
UINT SetTimer(
    HWND hWnd ,   //目标窗口句柄,或者lpTimerFunc的参数
    UINT nIDEvent, //定时器的ID,自己定义,当为0时不指定id,由系统返回一个id,通过id管理(kill)定时器
    UINT uElapse,  //定时时间
    TIMERPROC lpTimerFunc //回调处理函数
    );
//释放定时器
BOOL KillTimer(
    HWND hWnd,   //目标窗口句柄
    UINT uIDEvent //定时器的ID,自己定义
    );
使用定时器通常要么通过窗口的消息处理函数处理定时器消息(方法一),要么通过设置的回调函数处理(方法二、方法三)。

方法一:

/*-----------------------------------------
   BEEPER1.C  -- Timer Demo Program No. 1
                 (c) Charles Petzold, 1998
  -----------------------------------------*/

#include <windows.h>

//用宏定义定时器id
#define ID_TIMER    1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
//建立框架
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("Beeper1") ;
     HWND         hwnd ;
     MSG          msg
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值