📄 subject_47430.htm
字号:
<p>
序号:47430 发表者:张宝军 发表日期:2003-07-21 09:08:22
<br>主题:求救如何在vc++下实现低于50毫秒级别的精确定时扫描通信
<br>内容:求救如何在vc++下实现低于50毫秒级别的精确定时扫描通信
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:ben 回复日期:2003-07-21 09:24:29
<br>内容:时间控制函数<BR><BR>传统的方法使用WM_TIMER(),精度最低。<BR><BR>在要求不大于1毫秒的情况下,可以采用GetTickCount()函数,该函数的返回值是DWORD型,表示以毫秒为单位的计算机启动后经历的时间间隔。实现50毫秒精确定时方法:<BR><BR>DWORD dwstart,dwstop;<BR><BR>dwstop=GetTickCount();<BR><BR>while(TRUE)<BR><BR>{<BR><BR>dwstart=dwstop;<BR><BR> do{<BR><BR> dwstop=GetTickCount();<BR><BR> }while(dwstop-50<dwstart);<BR><BR>}<BR><BR>仅供WIN9X使用的高精度定时器:QueryPerformanceFrequency()和QueryPerformanceCounter(), 要求计算机从硬件上支持高精度定时器。函数的原形是:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);<BR><BR>BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);<BR><BR>数据类型LARGEINTEGER既可以是一个作为8字节长的整数,也可以是作为两个4字节长的整数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:typeef union _ LARGE_INTEGER<BR><BR>{<BR><BR> struct<BR><BR> {<BR><BR> DWORD LowPart;<BR><BR> LONG HighPart;<BR><BR> };<BR><BR> LONGLONG QuadPart;<BR><BR>} LARGE_INTEGER;<BR><BR>在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(), 利用两次获得的计数之差和时钟频率, 就可以计算出事件经历的精确时间。测试函数SLEEP(100)的精确持续时间方法:<BR><BR>LARGE_INTEGER litmp;<BR><BR>LONGLONG qt1,qt2;<BR><BR>double dft,dff,dfm;<BR><BR>QueryPerformanceFrequency(&litmp);//获得时钟频率<BR><BR>dff=(double)litmp.QuadPart;<BR><BR>QueryPerformanceCounter(&litmp);//获得初始值<BR><BR>qt1=litmp.QuadPart;Sleep(100);<BR><BR>QueryPerformanceCounter(&litmp);//获得终止值<BR><BR>qt2=litmp.QuadPart;<BR><BR>dfm=(double)(qt2-qt1);<BR><BR>dft=dfm/dff;//获得对应的时间值<BR><BR>需要注意的是DFT计算的结果单位是秒。<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lotoz 回复日期:2003-07-21 10:56:05
<br>内容:多谢大侠指点!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -