<b>用C++ Builder举行切确计时</b>[VC/C++编程]
本文“<b>用C++ Builder举行切确计时</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
固然Win95下可视化开辟工具如VC、Delphi、C++ Builder等都有专用的按时器控件Timer,并且利用很便利,可以实现一定的按时功效,但最小计时精度仅为55ms,且按时器消息在多任务操作系统中的优先级很低,不能得到及时呼应,常常不能满意及时掌握环境下的利用.不过Microsoft公司
在Win32 API函数库中已经为用户供应了一组用于高精度计时的底层函数,假如用户利用得当,计时精度可到1ms.这个计时精度、关于普通的及时系统掌握完好可以满意要求.现将由C++ Builder 4.0供应的重新封装后的一组与时间相关的主要接口函数(函数名、参数、功效与Win32 API基本相同)阐明以下:
1.DWORD timeGetTime(void)
返回从Windows启动开始经过的毫秒数.最大值为232,约49.71
天.
2.MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD dwUser,
UINT fuEvent
)
该函数设置一个按时回调事件,此事件可以是一个一次性事件或周期性事件.事件一旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,不然返回NULL.参数阐明以下:
uDelay:以毫秒指定事件的周期.
UResolution:以毫秒指定延时的精度,数值越小按时器事件辨别率越高.缺省值为1ms.
LpTimeProc:指向一个回调函数.
DwUser:存放用户供应的回调数据.
FuEvent:指定按时器事件范例:
TIME_ONESHOT:uDelay毫秒后只产生一次事件
TIME_PERIODIC :每隔uDelay毫秒周期性地产闹事件.
3.MMRESULT timeKillEvent(UINT uTimerID)
该函数撤消一个指定的按时器回调事件.uTimerID标识要撤消的事件(由timeSetEvent函数返回的标识符).假如成功则返回TIMERR_NOERROR
,假如按时器时间不存在则返回MMSYSERR_INVALPARAM.
void CALLBACK TimeProc(
UINT uID,
UINT uMsg,
DWORD dwUser,
DWORD dw1,
DWORD dw2
);
该函数是一个利用程序定义的回调函数,呈现按时器事件时该函数被调用.TimeProc是利用程序定义的函数名的占位符.利用该函数时要注意的是,它只能调用以下有限的几组API函数:PostMessage,timeGetSystemTime, timeGetTime, timeSetEvent,timeKillEvent,midiOutShortMsg, midiOutLongMsg,OutputDebugString.同时也不要利用完成时间很长的API函数,程序尽大概简短.
利用以上一组函数便可以完成毫秒级精度的计时和掌握(在C++Builder中利用时要将头文件mmsystem.h加到程序中).由于将按时掌握切确到几毫秒,按时器事件将占用大量的CPU时间和系统资源,所以在满意掌握要求的前提下,应尽大概将参数uResolution的数值增大.并且按时器及时掌握功效完成后要尽快释放.
以上是“<b>用C++ Builder举行切确计时</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |