vc高精度时间函数的使用
Posted 2018shawn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc高精度时间函数的使用相关的知识,希望对你有一定的参考价值。
方法一:
函数定义如下:
int UsSleep(int us);//返回实际的微秒延时时间
代码实现如下:
1 //参数一表示 需要等待的时间 微秒为单位 2 int UsSleep(int us) 3 { 4 //储存计数的联合 5 LARGE_INTEGER fre; 6 //获取硬件支持的高精度计数器的频率 7 if (QueryPerformanceFrequency(&fre)) 8 { 9 LARGE_INTEGER run,priv,curr,res; 10 run.QuadPart = fre.QuadPart * us / 1000000;//转换为微妙级 11 //获取高精度计数器数值 12 QueryPerformanceCounter(&priv); 13 do 14 { 15 QueryPerformanceCounter(&curr); 16 } while (curr.QuadPart - priv.QuadPart < run.QuadPart); 17 curr.QuadPart -= priv.QuadPart; 18 int nres = (curr.QuadPart * 1000000 / fre.QuadPart);//实际使用微秒时间 19 return nres; 20 } 21 return -1;//返回错误值。 22 }
在实际的使用过程中方法时间误差在1微秒。
方法二:
timeBeginPeriod(1); Sleep(1); DWORD dwTime = ::timeGetTime(); timeEndPeriod(1);
被包含在timeBeginPeriod和timeEndPeriod里面的Sleep和timeGetTime的
时间精度就是1ms,出了period函数对,还是原来的时间精度。
这么说你就应该懂了,当你需要时间精度为1ms时,就写个period函数对。
这2个period函数一般是成对出现。
参考:
Windows微秒级定时方法
windows开发,如何使Sleep函数精确到1毫秒
以上是关于vc高精度时间函数的使用的主要内容,如果未能解决你的问题,请参考以下文章
如何将基于mpir库的VC9.0代码转换为Matlab mex函数?