timeSetEvent()函数用法 您所在的位置:网站首页 timesetevent函数头文件 timeSetEvent()函数用法

timeSetEvent()函数用法

2024-06-04 05:19| 来源: 网络整理| 查看: 265

MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, WORD dwUser, UINT fuEvent )

uDelay:以毫秒指定事件的周期。Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。LpTimeProc:指向一个回调函数。DwUser:存放用户提供的回调数据。FuEvent:指定定时器事件类型:TIME_ONESHOT:uDelay毫秒后只产生一次事件TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。

微软公司在其多媒体Windows中提供了精确定时器的底层API支持。利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内 完成一个事件、函数或过程的调用。利用多媒体定时器的基本功能,可以通过两种方法实现精确定时。1)使用timeGetTime()函数,该函数定时精度 为ms级,返回从Windows启动开始所经过的时间。由于使用该函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。 2)使用timeSetEvent()函数,该函数原型如下:

MMRESULT timeSetEvent(UINT uDelay,UINT uResolution,LPTIMECALLBACK lpTimeProc,DWORD dwUser,UINT fuEvent); 

该函数的参数说明如下:参数uDelay表示延迟时间;参数uResolution表示时间精度,在Windows中缺省值为 1ms;lpTimeProc表示回调函数,为用户自定义函数,定时调用; 参数dwUser表示用户提供的回调数据;参数fuEvent为定时器的事件 类型,TIME_ONESHOT表示执行一次;TIME_PERIODIC:周期性执行。具体应用时,可以通过调用timeSetEvent()函数,将 需要周期性执行的任务定义在lpTimeProc回调函数中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是:任务处理的时间不能大于周 期间隔时间。另外,在定时器使用完毕后,应及时调用timeKillEvent()将之释放。下面这段代码的主要功能是设置两个时钟定时器,一个间隔是 1ms,一个间隔是2s。每执行一次,把当前系统时钟值输入文件"cure.out"中,以比较该定时器的精确度。

# define ONE_MILLI_SECOND 1 //定义1ms和2s时钟间隔,以ms为单位 ;# define TWO_SECOND 2000 # define TIMER_ACCURACY 1 //定义时钟分辨率,以ms为单位 UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔 UINT wAccuracy; //定义分辨率 UINT TimerID_1ms,TimerID_2s; //定义定时器句柄///////////////////////////////CCureApp::CCureApp():fout("cure.out", ios::out) //打开输出文件"cure.out";{ // 给时间间隔变量赋值 wTimerRes_1ms = ONE_MILLI_SECOND; wTimerRes_2s = TWO_SECOND; TIMECAPS tc; //利用函数timeGetDeVCaps取出系统分辨率的取值范围,如果无错则继续; if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR) { wAccuracy=min(max(tc.wPeriodMin, //分辨率的值不能超出系统的取值范围TIMER_ACCURACY),tc.wPeriodMax); //调用timeBeginPeriod函数设置定时器的分辨率 timeBeginPeriod(wAccuracy); //设置定时器 InitializeTimer(); } } CCureApp:: ~CCureApp() { fout 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有