您的位置:首页 > 编程语言 > C语言/C++

【C++】延时调用的其中两种实现

2016-03-04 10:23 666 查看
转自:http://blog.csdn.net/tangweide/article/details/7063747

方法一VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时
间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常 简单,可以实现一定的定时功能,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,最小 计时精度仅为30ms,CPU占用低,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响 应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的Timer1。

方法二:使用多媒体定时器timeSetEvent()函数,该函数定时精度为ms级。利用该函数可以实现周期性的函数调用。如示例工程中的Timer6和Timer6_1。函数的原型如下:

    MMRESULT timeSetEvent( UINT uDelay,

                UINT uResolution,

                LPTIMECALLBACK lpTimeProc,

                WORD dwUser,

                UINT fuEvent )

  该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一旦被激活,便调用指定的回调函数, 成功后返回事件的标识符代码,否则返回NULL。函数的参数说明如下:

    uDelay:以毫秒指定事件的周期。

    Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。

    LpTimeProc:指向一个回调函数。

    DwUser:存放用户提供的回调数据。

    FuEvent:指定定时器事件类型:

    TIME_ONESHOT:uDelay毫秒后只产生一次事件

    TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。   

  具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在LpTimeProc回调函数 中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是,任务处理的时间不能大于周期间隔时间。另外,在定时器使用完毕后, 应及时调用timeKillEvent()将之释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: