定時(shí)器為windows開發(fā)者提供了一種周期性處理某種事物的方法,但是timer的使用也有它自己的局限之處。
如定時(shí)器消息并不是異步的,WM_TIMER消息放在正常的消息隊(duì)列之中,和其他消息排列在一起,一次,如果設(shè)置間隔時(shí)間為1秒,并不能保證程序每1000ms就能收到一個(gè)WM_TIMER消息。如果其他事件的處理時(shí)間超過1m,在此期間,程序是收不到任何WM_TIMER消息的。而事實(shí)上,windows對(duì)WM_TIMER消息到處理非常類似于對(duì)WM_PAINT消息的處理,這兩個(gè)消息都是低優(yōu)先級(jí)的,只有在沒有其他消息的時(shí)候才會(huì)接受它們。
另外一點(diǎn)就是WM_TIMER消息在消息隊(duì)列中只有1個(gè),如果持續(xù)向消息隊(duì)列放入WM_TIMER消息,消息處理機(jī)制將會(huì)把多余的WM_TIMER消息合成一個(gè)消息,這種情況下,應(yīng)用程序?qū)⒉荒艽_定遺漏的WM_TIMER消息個(gè)數(shù)。
因此,在對(duì)時(shí)間處理精度要求較高的場合,請(qǐng)慎用定時(shí)器。