想要程序每隔一段时间实现某一功能,可以使用SetTimer函数向Windows申请一个定时器。
----------------------------------------分割线--------------------------------------------------
invoke SetTimer,hWnd,nIDEvent,nElapse,lpTimerFunc
hWnd——窗口句柄
nIDEvent——定时器ID,如果有多个定时器,通过这个ID判断是哪个定时器(wParam存储ID值)
nElapse——时间间隔,单位ms,无论设置的值是多少,真实的间隔都将是55ms的整数倍
lpTimerFunc——回调函数
----------------------------------------分割线--------------------------------------------------
invoke KIllTimer,hWnd,uIdEvent
----------------------------------------分割线--------------------------------------------------
定时器的实现方法有两种
1、向窗口过程发送WM_TIMER消息
这种方法在设置定时器时lpTimerFunc必须设置为NULL。在窗口过程中,通过判断wParam的值来辨别是哪个定时器发送的WM_TIMER。使用KillTimer销毁定时器时,uIdEvent使用SetTimer中的nIDEvent。
2、使用回调函数
在申请定时器时一般将hWnd,nIDEvent设置成NULL,lpTimerFunc设置函数地址,这时定时器没有函数ID,但定时器设置成功后SetTimer会返回一个ID,可以存储这个ID,在要销毁这个定时器时uIdEvent使用这个ID。当然,也可以自己指定这个定时器ID,但是hWnd不能设置成NULL,否则,指定的ID无效。
注意:1、定时器是一个低级别的消息,Windows只有在消息队列中没有其他消息时才会发送WM_TIMER消息,如果消息队列中有消息累积,那么WM_TIMER就会被丢弃,并且不会被补发;
2、消息队列中不会有多条WM_TIMER消息,如果消息队列中已经有1条WM_TIMER消息没有被处理,那么,到了定时的时刻,两条WM_TIMER会被合并成一条。