计时器的使用主要分为创建、处理、销毁三个部分。
①. 创建: 创建一个计时器并设定其定计时器的任务周期, 例如每5秒向程序发送一条 WM_TIMER 消息 ;
②. 处理: 根据接收到的 WM_TIMER 消息让程序作出响应的处理 ;
③. 销毁: Windows的计时器属于系统资源, 在使用完毕后应及时销毁。
计时器的创建
要创建一个计时器可以使用 SetTimer 函数, SetTimer函数的原型:
复制代码
UINT_PTR SetTimer(
HWND hWnd, //窗口句柄
UINT_PTR nIDEvent, //定时器的ID
UINT uElapse, //间隔时间, 单位为毫秒
TIMERPROC lpTimerFunc //所使用的回调函数
);
参数说明:
参数一窗口句柄即为接收 WM_TIMER 消息的窗口句柄;
参数二为设置该计时器的ID, 用于与其他的计时器进行区分;
参数三为计时器发送 WM_TIMER 消息的时间间隔, 单位为毫秒, 最大可设置的时间间隔为一个 unsigned long int 型所能容下的数据大小, 为 4 294 967 295 毫秒(约合49.7天), 当设定的时间间隔到了后Windows就会向应用程序的消息队列放入一个 WM_TIMER 消息 ;
参数四为定时器所使用的回调函数, 当使用回调函数时, 所产生的 WM_TIMER 消息自动调用回调函数进行处理。
其函数的返回值为成功创建的定时器的ID。
你可以在任何时候创建一个新的计时器, 例如在接收到 WM_CREATE 消息时。
创建计时器的三种方式:
方式一: 不使用回调函数
SetTimer( hwnd, nIDEvent, uiMsecInterval, NULL ) ;
创建举例:
SetTimer( hwnd, 1, 100, NULL ) ;
这样我们就创建了一个ID为1, 消息频率为100毫秒, 没有使用回调函数的计时器, 每当程序运行100毫秒Windows就会向应用程序的消息队列里放入一个 WM_TIMER 消息。
方式二: 使用回调函数
SetTimer( hwnd, nIDEvent, uiMsecInterval, TimeProc ) ;
创建举例:
SetTimer( hwnd, 1, 100, TimeProc ) ;
TimeProc即为该定时器所指定使用的回调函数, 它可以是你喜欢的任何名字, 但是函数声明时的类型必须为 CALLBACK 型, 表示该函数为回调函数, 需要注意的时, 当为定时器使用回调函数时, 该定时器所发出的 WM_TIMER 消息将直接发送给回调函数进行处理并从消息队列里销毁该消息。
方式三: 不使用窗口句柄
iTimerID = SetTimer( NULL, 0, uiMsecInterval, TimeProc ) ;
当忽略窗口句柄时, 那么第二个参数计时器ID也应被忽略, 填充0, 由系统随机分配一个与其他定时器不重复的ID, 返回值即为分配到的ID, 如果返回值为0表示计时器创建失败, 如果要处理该定时器发出的消息需要配合回调函数使用。