MSDN上按照下面方法定义SetTimer函数的
The SetTimer function creates a timer with the specified time-out value.
//SetTimer函数创建一个指定时间间隔的定时器
Syntax
UINT_PTR SetTimer(
HWND hWnd,
UINT_PTR nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc
);
Parameters
hWnd [in] Handle to the window to be associated with the timer. This window must be owned by the calling thread. If this parameter is NULL, no window is associated with the timer and the nIDEvent parameter is ignored. //指向与与定时器相关的窗口,这个窗口必须拥有调用该定时器的线程.如果该参数是NULL那么该timer的ID将被忽略,也就是该timer失效.nIDEvent [in] Specifies a nonzero timer identifier. If the hWnd parameter is NULL, this parameter is ignored. If the hWnd parameter is not NULL and the window specified by hWnd already has a timer with the value nIDEvent, then the existing timer is replaced by the new timer. When SetTimer replaces a timer, the timer is reset. Therefore, a message will be sent after the current time-out value elapses, but the previously set time-out value is ignored. //这个函数将被忽略,如果参数hWnd 为NULL,如果系统已经有 了一个timer的ID和这个新设置的ID相同,那么这个新的ID将取代旧的ID,当目前的时间片到的时候,一个消息将要被发送,以前的时间设置的值将被取消.uElapse [in] Specifies the time-out value, in milliseconds. //指定时间间隔Windows NT/2000/XP: If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to 1.
Windows 2000/XP: If uElapse is less than USER_TIMER_MINIMUM, the timeout is set to USER_TIMER_MINIMUM.
Windows Server 2003: If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM.
Windows XP SP2/Windows Server 2003 SP1: If uElapse is less than USER_TIMER_MINIMUM, the timeout is set to USER_TIMER_MINIMUM. If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM.
lpTimerFunc [in] Pointer to the function to be notified when the time-out value elapses. For more information about the function, see TimerProc. If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue. The hwnd member of the message's MSG structure contains the value of the hWnd parameter. //如果该参数是NULL,那么系统将发送WM_TIMER到消息队列, MSG结构中的hwnd 将包含hWnd 参数.如果该参数不是NULL,那么当时间到达的时候,将调用TimerProc.函数Return Value
If the function succeeds and the hWnd parameter is NULL, the return value is an integer identifying the new timer. An application can pass this value to the KillTimer function to destroy the timer.
//当参数hWnd 为NULL而且函数运行成功后,返回一个整数表明新的timer.应用程序通过这个值调用KillTimer 函数去销毁这个timer.
If the function succeeds and the hWnd parameter is not NULL, then the return value is a nonzero integer. An application can pass the value of the KillTimer parameter to the KillTimer function to destroy the timer.
//反之,返回值是一个非领的整数,应用程序能通过KillTimer 这个值去调用 函数去调用 KillTimer 销毁timer.
If the function fails to create a timer, the return value is zero. To get extended error information, call GetLastError.
//函数失败,返回值是领,要得到更多的错误信息参看GetLastError.
Remarks
An application can process WM_TIMER messages by including a WM_TIMER case statement in the window procedure or by specifying a TimerProc callback function when creating the timer. When you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER.
The wParam parameter of the WM_TIMER message contains the value of the nIDEvent parameter.
The timer identifier, nIDEvent, is specific to the associated window. Another window can have its own timer which has the same identifier as a timer owned by another window. The timers are distinct.
SetTimer can reuse timer IDs in the case where hWnd is NULL.