[in, optional] HWND hWnd,
[in] UINT_PTR nIDEvent,
[in] UINT uElapse,
[in, optional] TIMERPROC lpTimerFunc
parameters
[in, optional] hWnd
类型:
HWND
要与计时器关联的窗口的句柄。 此窗口必须由调用线程拥有。 如果
hWnd
的
NULL
值与现有计时器的
nIDEvent
一起传入,则将按照现有非 NULL
hWnd
计时器的相同方式替换该计时器。
[in] nIDEvent
类型:
UINT_PTR
非零计时器标识符。 如果
hWnd
参数为
NULL
,并且
nIDEvent
与现有计时器不匹配,则忽略它并生成新的计时器 ID。 如果
hWnd
参数不为
NULL
,并且
hWnd
指定的窗口已有一个值为
nIDEvent
的计时器,则现有计时器将替换为新的计时器。
当 SetTimer
替换计时器时,计时器将重置。 因此,将在当前超时值过后发送消息,但忽略以前设置的超时值。 如果调用不打算替换现有计时器,则
如果 hWnd
为
NULL
,
则 nIDEvent
应为 0。
[in] uElapse
类型:
UINT
超时值(以毫秒为单位)。
如果
uElapse
小于
USER_TIMER_MINIMUM
(0x0000000A) ,则超时设置为
USER_TIMER_MINIMUM
。 如果
uElapse
大于
USER_TIMER_MAXIMUM
(0x7FFFFFFF) ,则超时设置为
USER_TIMER_MAXIMUM
。
[in, optional] lpTimerFunc
类型:
TIMERPROC
指向在超时值过后要通知的函数的指针。 有关 函数的详细信息,请参阅
TimerProc
。 如果
lpTimerFunc
为
NULL
,系统会将
WM_TIMER
消息发布到应用程序队列。 消息的
MSG
结构的
hwnd
成员包含
hWnd
参数的值。
类型:
UINT_PTR
如果函数成功且
hWnd
参数为
NULL
,则返回值为标识新计时器的整数。 应用程序可以将此值传递给
KillTimer
函数以销毁计时器。
如果函数成功且
hWnd
参数不为
NULL
,则返回值为非零整数。 应用程序可以将
nIDEvent
参数的值传递给
KillTimer
函数以销毁计时器。
如果函数无法创建计时器,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
应用程序可以通过在窗口过程中包括
WM_TIMER
case 语句或在创建计时器时指定
TimerProc
回调函数来处理
WM_TIMER消息。
指定
TimerProc
回调函数时,DispatchMessage 会在使用非 NULL lParam 处理
WM_TIMER
时调用回调函数,而不是调用窗口过程。 因此,即使在使用
TimerProc
而不是处理
WM_TIMER
时,也需要在调用线程中调度消息。
WM_TIMER
消息的
wParam
参数包含
nIDEvent
参数的值。
计时器标识符
nIDEvent
特定于关联的窗口。 另一个窗口可以有自己的计时器,其标识符与另一个窗口拥有的计时器相同。 计时器是不同的。
如果
hWnd
为
NULL
,
SetTimer
可以重复使用计时器 ID。
在使用
SetTimer
或其他与计时器相关的函数之前,建议通过
SetUserObjectInformationW
函数将
UOI_TIMERPROC_EXCEPTION_SUPPRESSION
标志设置为
false
,否则应用程序的行为可能不可预知,并且容易受到安全漏洞的攻击。 有关详细信息,请参阅
SetUserObjectInformationW
。
有关示例,请参阅
创建计时器
。