1
WM_Timer消息的产生:
windows本身处理硬件中断,对于应用程序的定时器,windows存储一个每次硬件timer_tick减少的计时数,当这个数减少到0的时候,windows会在应用程序的消息对列中放一个WM_Timer的消息,同时将timer_tick恢复到原值。由于WM_Timer消息是在消息队列中,所以其类似鼠标和键盘,不会中断应用程序的执行。
2 定时器的准确性:
windows定时器是PC硬件和ROM BIOS架构下对定时器的一种相当简单的扩充。所以它的分辨率是有固定值的,在Windows98中,时钟频率是每秒18.2次,windowsNT(windows New Technology,从Windows NT 3.1到现在的win8都是windowsNT)是100次每秒,所以在SetTimer中设置的时间nTime/deltaTime = timer_tick,deltaTime是指windows系统定时器的时间间隔(windowsNT,那就是10ms了)。
(1)从上面可以看出,timer_tick是个截尾的整数,并且当nTime<deltaTime的时候,timer_tick =0(此时每个tick都会触发WM_Timer消息),因此从此可以看出,定时器是不精确的。
windows本身处理硬件中断,对于应用程序的定时器,windows存储一个每次硬件timer_tick减少的计时数,当这个数减少到0的时候,windows会在应用程序的消息对列中放一个WM_Timer的消息,同时将timer_tick恢复到原值。由于WM_Timer消息是在消息队列中,所以其类似鼠标和键盘,不会中断应用程序的执行。
2 定时器的准确性:
windows定时器是PC硬件和ROM BIOS架构下对定时器的一种相当简单的扩充。所以它的分辨率是有固定值的,在Windows98中,时钟频率是每秒18.2次,windowsNT(windows New Technology,从Windows NT 3.1到现在的win8都是windowsNT)是100次每秒,所以在SetTimer中设置的时间nTime/deltaTime = timer_tick,deltaTime是指windows系统定时器的时间间隔(windowsNT,那就是10ms了)。
(1)从上面可以看出,timer_tick是个截尾的整数,并且当nTime<deltaTime的时候,timer_tick =0(此时每个tick都会触发WM_Timer消息),因此从此可以看出,定时器是不精确的。