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
  • hwndnull时,该函数有替换重复定时器Id处理函数的动作,当前后两个定时器处理事件不一致时,容易引发潜在错误。**在使用时务必注意,nIDEvent必须设置为0.**
  • 不管hwnd为null还是非null,都要以SetTimer返回值作为定时器标识,而不是以nIDEvent入参
  • SetTimer返回0表示出错,调用GetLastError获得更多错误信息。
  • 与窗口hwnd关联的定时器ID的作用域是窗口,两个不同的窗口可以拥有相同的定时器Id.
原文地址:https://www.cnblogs.com/cherishui/p/13997135.html