定时器的使用

定时器是一种输入设备,它会周期性地通知操作系统给应用程序发送定时器消息。定时器的时间间隔达到后,Windows会给程序发送WM_TIMER消息以表示时间到了,而程序猿需要在WM_TIMER消息中处理对定时器的响应。


设置定时器可使用如下SetTimer()函数:

UNIT SetTimer(
    HWND hWnd,  //窗口句柄
    UNIT nIDEvent,  //定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
    UNIT uElapse,  //时间间隔,单位为毫秒
    TIMERPROC lpTimerFunc  //回调函数
};

定时器编号从1开始,lpTimerFunc设置成NULL即可。

调用KillTimer函数关闭定时器,需要指出的是,KillTimer参数中的定时器编号需要和SetTimer中定时器编号一致。

(例如在游戏中可以通过设置不同的定时器时间间隔来调整游戏速度,可以在初始化窗口的时候设置定时器)

TIPS:由于Windows不是实时操作系统,定时器的时间间隔尽量不要少于10毫秒以提高定时器准确度。


销毁定时器可用KillTimer()函数:

BOOL KillTimer(
    HWND hWnd,
    UINT uIDEvent
);

参数含义同SetTimer()

如果函数执行成功,则返回非0,否则返回0值。


多个定时器:

有时需要多个定时器,多个定时器同时使用的例子如下:

#define TIMER_ID1 1
#define TIMER_ID2 2
#define TIMER_ID3 3
SetTimer(hWnd, TIMER_ID1, 5000, NULL);
SetTimer(hWnd, TIMER_ID2, 6000, NULL);
SetTimer(hWnd, TIMER_ID3, 7000, NULL);

在消息响应函数里需要根据wParam参数来区分不同的定时器编号,分别进行相应的消息处理:

case WM_TIMER:
    switch(wParam)
    {
        case TIMER_ID1:
            MessageBox(...);
            break;
        case TIMER_ID2:
            MessageBox(...);
            break;
        case TIMER_ID3:
            MessageBox(...);
            break;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值