0毫秒,那么Windows将每秒给程式发送一个WM_TIMER讯息。
当您的程式用完计时器时,它呼叫KillTimer函式来停止计时器讯息。在处理WM_TIMER讯息时,您可以通过呼叫KillTimer函式来编写一个「限用一次」的计时器。KillTimer呼叫清除讯息伫列中尚未被处理的WM_TIMER讯息,从而使程式在呼叫KillTimer之後就不会再接收到WM_TIMER讯息。
系统和计时器
Windows计时器是PC硬体和ROM
BIOS架构下之计时器一种相对简单的扩充。回到Windows以前的MS-DOS程式写作环境下,应用程式能够通过拦截者称为timer
tick的BIOS中断来实作时钟或计时器。一些为MS-DOS编写的程式自己拦截这个硬体中断以实作时钟和计时器。这些中断每54.915毫秒产生一次,或者大约每秒18.2次。这是原始的IBM
PC的微处理器时脉值4.772720 MHz被218所除而得出的结果。
Windows应用程式不拦截BIOS中断,相反地,Windows本身处理硬体中断,这样应用程式就不必进行处理。对於目前拥有计时器的每个程式,Windows储存一个每次硬体timer
tick减少的计数。当这个计数减到0时,Windows在应用程式讯息伫列中放置一个WM_TIMER讯息,并将计数重置为其最初值。
因为Windows应用程式从正常的讯息伫列中取得WM_TIMER讯息,所以您的程式在进行其他处理时不必担心WM_TIMER讯息会意外中断了程式。在这方面,计时器类似於键盘和滑鼠。驱动程式处理非同步硬体中断事件,Windows把这些事件翻译为规律、结构化和顺序化的讯息。
在Windows
98中,计时器与其下的PC计时器一样具有55毫秒的解析度。在Microsoft Windows NT中,计时器的解析度为10毫秒。
Windows应用程式不能以高於这些解析度的频率(在Windows 98下,每秒18.2次,在Windows
NT下,每秒大约100次)接收WM_TIMER讯息。在SetTimer呼叫中指定的时间间隔总是截尾後tick数的整数倍。例如,1000毫秒的间隔除以54.925毫秒,得到18.207个tick,截尾後是18个tick,它实际上是989毫秒。对每个小於55毫秒的间隔,每个tick都会产生一个WM_TIMER讯息 |