网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文

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

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/07/08

鉴于大家对C/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主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。

  • 上一篇资讯: C++ 自定义动态数组模板
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号