SetTimer函数使用注意
该函数的原型声明如下:
UINT_PTR SetTimer(
HWND hWnd,
UINT_PTR nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc
);
第一个参数hWnd:与该定时器关联的窗口句柄。
第二个参数nIDEvent:非0的定时器标示符。
这两个参数的关联关系如下:
hwnd | nIDEvent |
---|---|
null | 如果nIDEvent与已有定时器ID无重复,忽略入参nIDEvent,返回新的定时器Id。如果有重复,则会替换旧的定时器 |
非null | nIDEvent与hwnd关联的IDEvent有重复,已有的IDEvent将被替换为新的定时器 |
第三个参数是超时时间,单位为毫秒。
第四个参数为回调指针,如果设置为NULL
,则通过WM_TIMER
消息来通知,否则通过回调指针通知。
注意事项:
- 如果调用者没有替换已有定时器意图,nIDEvent必须为0,并且hwnd为null。
- 当
hwnd
为null
时,该函数有替换重复定时器Id
处理函数的动作,当前后两个定时器处理事件不一致时,容易引发潜在错误。**在使用时务必注意,nIDEvent必须设置为0.**
- 不管hwnd为null还是非null,都要以SetTimer返回值作为定时器标识,而不是以nIDEvent入参。
- 当
SetTimer
返回0
表示出错,调用GetLastError
获得更多错误信息。 - 与窗口
hwnd
关联的定时器ID的作用域是窗口,两个不同的窗口可以拥有相同的定时器Id
.