首页 理论教育 SetTimer函数的调用指南

SetTimer函数的调用指南

时间:2023-10-21 理论教育 版权反馈
【摘要】:SetTimer函数用来设定一个定时器,该函数原型如下:其中,dwTimerID是定时器对象的标识符,用来标识定时器,这个参数的作用是为了让应用程序能够区分定时器对象。dwTimerFlags指定设置什么样的定时器。如果dwTimerFlags设置了TIMER_FLAGS_ONCE,则设置了一个一次定时器,如果dwTimerFlags设置为TIMER_FLAGS_ALWAYS,则设定了一个永久定时器。需要说明的是,定时器超时处理有两种方式,一种方式是给调用SetTimer设定定时器的线程发送一个消息;另外一种方式是调用SetTimer设定的一个超时函数。

SetTimer函数的调用指南

SetTimer函数用来设定一个定时器,该函数原型如下:

其中,dwTimerID是定时器对象的标识符,用来标识定时器,这个参数的作用是为了让应用程序能够区分定时器对象。很多情况下,一个应用程序可能设定多个定时器,这样为了区分多个定时器,需要为每个定时器设定一个不同的ID。

dwTimeSpan则是以毫秒(ms)为单位的超时间隔,超时间隔从设定开始计时,每次时钟中断都会递减该超时间隔,一旦超时间隔递减为0,定时器超时,会根据情况采取相应的动作。

DirectHandler是一个函数指针,如果用户设定定时器时,指定了该参数,则当定时器超时时,由操作系统核心调用该函数。lpParam则是该函数的参量;如果用户设定定时器时,没有指定该参数,则当定时器超时的时候,操作系统会给设定定时器的线程(当前线程)发送一个定时器超时消息。

dwTimerFlags指定设置什么样的定时器。当前版本中,Hello China支持两种类型的定时器:一次定时器和永久定时器。一次定时器是只有一次超时处理的定时器,一旦定时器超时,则超时处理之后,该定时器对象将被删除,而永久定时器则是一个反复循环的定时器,一旦定时器超时,引发超时处理(发送消息或调用回调函数),超时处理完成之后,操作系统继续保留该定时器,并重新设置超时值,除非用户调用CancelTimer取消该定时器,否则该定时器会一直存在。如果dwTimerFlags设置了TIMER_FLAGS_ONCE,则设置了一个一次定时器,如果dwTimerFlags设置为TIMER_FLAGS_ALWAYS,则设定了一个永久定时器。(www.xing528.com)

需要说明的是,定时器超时处理有两种方式,一种方式是给调用SetTimer设定定时器的线程发送一个消息;另外一种方式是调用SetTimer设定的一个超时函数。这两种方式是互斥的,即如果用户在调用SetTimer的时候,设定了一个超时回调函数(DirectHandler),则当定时器超时时,只会调用该函数(以lpParam为参数),而不会再给用户线程发送一个消息;如果用户调用SetTimer的时候,指定DirectHandler为NULL,则超时时,直接给用户线程发送一个消息。下面代码是Hello China目前定义的消息格式。

在超时处理过程中,操作系统核心会为用户线程发送一个消息,消息内容中的wCommand字段设置为KERNEL_MESSAGE_TIMER;dwParam字段设置为定时器标识(即

SetTimer调用中的dwTimerID参数)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈