计时器

Windows计时器是一种输入设备,它周期性的每经过一个指定时间发给应用程序一个WM_TIMER消息。

计时器被用于多任务、维护更新过的状态报告、实现自动保存、中止程序演示版运行、步进移动和多媒体。

计时器基础

可以通过调用SetTimerWindows程序分配一个计时器。SetTimer有一个时间范围近50天的整形参数,这个值表示多长时间给程序发送WM_TIMER消息。当用完计时器时,调用KillTimer函数停止计时器消息。

系统和计时器

Windows使用的计时器是PC硬件ROM BIOS构造的计时器逻辑的一种简单的扩展。WindowsMS-DOS变成,应用程序通过捕获“计时器滴答”的BIOS中断来实现时钟或计时器。这些中断每54.915毫秒产生一次,大约每秒18.2次。

Windows应用程序不捕获BIOS中断,Windows本身处理硬件中断,这样应用程序不必进行处理。对于拥有计数器的程序,Windows保存一个每次硬件滴答减少的计数。当计数器减到0时,Windows在应用程序消息队列防一个WM_TIMER消息。

因为Windows程序从正常消息队列获取WM_TIMER消息,所以程序不必担心被偶然的WM_TIMER消息中断了程序。

Win98中,计时器和潜在的PC计时器一样具有55毫秒的分辨率。在NT以上,计时器分辨率为10毫秒。

应用程序不能以高于这个分辨率的速率接收WM_TIMER消息。SetTimer调用中指定的时间间隔总是截尾为时钟滴答的整数倍。例如,1000毫秒除以54.925毫秒,得到18.207个时钟滴答,截尾后为18个时钟滴答,它实际为989毫秒。对于小于55毫秒的间隔,每个时钟滴答都产生一个WM_TIMER消息。

计时器消息不是异步

计时器是基于硬件计时中断,但是WM_TIMER消息却不是异步的,WM_TIMER被放在消息队列中,其他消息一起参加排序。同WM_PAINT消息相似,Windows不会在消息队列中放入多个WM_TIMER消息,WM_TIMER消息也是低优先级的,Windows只有在消息队列中没有其他消息时才对WM_TIMER消息进行处理。

计时器使用

方法一:让WindowsWM_TIMER消息发送到窗口过程。SetTimer(hwnd, 1,uiTime ,NULL);

方法二:Windows直接将计时器消息发送给程序的另一函数。

方法三:类似于方法二,但不指定SetTimer的窗口句柄,此时第二个参数计时器ID被忽略,SetTimer将返回一个计时器ID(如果没有可用计时器返回NULL)。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页