`

C++中获取高精度时间差

    博客分类:
  • c++
阅读更多

解决一个问题通常有多种方法, 我们总想找到最高效的,所以需要对比不同算法执行所用的时间。可惜的是,C++中提供的方法一般只能精确到毫秒级。

  提供一种更加精确的方法。编写一个函数,可以在C++中这样写:

  __declspec (naked) unsigned __int64 GetCpuCycle( void )

  {

  _asm

  {

  rdtsc

  ret

  }

  }

  RDTSC的返回值存放在EDX EAX中, EDX为高32位,EAX为低32位。这里的 RDTSC 指令( Read Time Stamp Counter ), 获得CPU的高精度时间戳。

  这样以来我们就可以在随处获得当前的CPU自上电以来的时间周期数了:

  unsigned __int64 iCpuCycle = GetCpuCycle();

  根据这个数字我们可以计算出上电以来所经历的时间( 秒s ):

  second = iCpuCycle / CPU主频率( HZ );

  1GHZ = 1,000 MHZ = 1,000,000 KHZ = 1,000,000,000 HZ;

  获取两次作差就可以得到运行的时间了。其实没必要换算成时间,关注差值就行了。

  PS:

  可以放心一个unsigned __int64 不会溢出 - - 可以计算一下你的CPU能保存多少年的时间。。

  根据这一方法有几个好处: 一是精度高,二是函数调用开销最小,三是平台限制小,四是具有和CPU主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。

原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/62/11805062.shtml

分享到:
评论

相关推荐

    C/C++获取(毫秒/微秒/纳秒级)系统时间差方法大全

    总结了常用的四种方法。包括: 方法一 利用 SYSTEMTIME 方法二 利用 GetTickCount()函数 方法三 使用clock()函数 方法四 获取高精度时间差 个人感觉还是很清晰明了的。希望对大家有用。

    C/C++获取系统时间差的方法总结

    总结了常用的四种方法。包括: 方法一 利用 SYSTEMTIME 方法二 利用 GetTickCount()函数 方法三 使用clock()函数 方法四 获取高精度时间差 个人感觉还是很清晰明了的。希望对大家有用。

    c++高精度时间纳秒

    用于代码测试性能,可以得出代码执行时间,以便优化代码 可以获得纳秒级别的时间差 //时 //分 //秒 //纳秒 //微妙 //毫秒

    C语言获取当前系统时间的几种方式

    6 要获取高精度时间,可以使用 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency) 获取系统的计数器的频率 BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) 获取计数器的值 然后用两次...

    vc++ 毫秒计时,高精度时间统计

    内容索引:VC/C++源码,系统相关,毫秒,计时 vc++ 毫秒计时,高精度时间统计,能算出两点间的毫秒时间差,以前发布过相似的实例,有兴趣的朋友比较一下有何不同。

    通过相移条纹图差分测定相移量的方法

    由于不使用傅里叶变换,减少了运算时间,既可以用于高空间频率条纹,也可以用于稀疏平行条纹,以及任意花样的条纹。在衬比度因子确定后,用这种方法就能够直接在空域内确定两幅条纹图之间的相移量,通过大量采样点进行统计...

    IOI国家集训队论文集1999-2019

    的高精度算法》 ## 2002 戴德承 -《退一步海阔天空——"目标转化思想"的若干应用》 方 奇 -《浅谈必要条件的应用》 符文杰 -《排序网络》 何江舟 -《用高斯消元法解线性方程组》 何 林 -《猜想及其应用》...

    输油管道泄漏监测与定位系统的研制 (2003年)

    该系统将输差检漏技术与负压波定位技术 相结合,用 GPS解决分布系统的采样时间同步问题,用小波变换解决被噪声污染信号的特征点提 取问题,并将现场运行工况在屏幕上形象直观地显示出来。该系统应用数据库技术,实现运行...

    c语言编写单片机技巧

    答:在单片机开发中,主要是汇编和C,没有用C++的。 3. 搞单片机开发,一定要会C吗? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序...

    TI杯二等奖——手把手教你制作电子秤(完整设计资料)-电路方案

    AD:24位高精度HX711 内码:0.01克/3 精度:0-50克误差0.10 50-500克误差0.50克 预热时间:1min 称重范围0-600g 放大方式:全桥差分 实测参数及误差 砝码标值标准电子秤数值简易电子秤数值误差 109.910.050.15 5049.850....

Global site tag (gtag.js) - Google Analytics