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

时间: 2024-12-02 13:11:04

C++中获取高精度时间差的相关文章

contentprovider-从“canonical_addresses”表中获取地址

问题描述 从"canonical_addresses"表中获取地址 在android程序中,我从下面的 uri 中获取 recipient_id . content://mms-sms/conversations?simple=true 现在我想使用 recipient id 从"canonical_addresses"表中获取地址.但是如何查询"canonical_addresses"表呢? 解决方案 Canonical 表中有两列,_id 和

c3p0连接池中获取的Connection对象的close()方法是真的把连接给关闭了?

问题描述 c3p0连接池中获取的Connection对象的close()方法是真的把连接给关闭了? 自己做写了一个管理数据源的DBManager,构想中从数据源里面获取的Connection使用完之后执行close()方法,然后把Connection对象闲置回连接池中. 但是测试出来的结果好像每次执行close()之后connection就销毁了. 代码如下: DBManager.java package ben.DBUtils; import java.sql.Connection; impo

android-如何从电话的联系表中获取email?

问题描述 如何从电话的联系表中获取email? 我想从手机的联系列表中获取不同的电子邮件地址,比如工作,家庭住址等.我用的下面的代码,但是发现返回的结果是0.怎么回事啊? Cursor email = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI null Data.CONTACT_ID + "" ="" + id null null); while (email.moveToNext())

ios-IOS中获取到数组,每一次获取到的不一样,把这些数组拼接成一个数组

问题描述 IOS中获取到数组,每一次获取到的不一样,把这些数组拼接成一个数组 OC获取数据,循环放入数组中,让这些数据拼接成数组,这些数据也可能是一个数组,把数组拼接成一个数组 解决方案 //构造不同数组 NSArray *array1 = @[@"1",@"2",@"3",@"4"]; NSArray *array2 = @[@"5",@"6",@"7",@&quo

Linux系统中获取路径的文件名的方法

  这篇文章主要介绍了Linux系统中获取路径的文件名的方法,文中总结出了两条,需要的朋友可以参考下 代码如下: [root@dabu.info ]#basename /root/aaa/bbb/dabu.txt 显示: 代码如下: dabu.txt #获取路径的文件名 shell脚本中如何获得脚本文件所在路径? 方法一: 代码如下: [root@dabu.info ]#DIR=$(cd "$(dirname "$0")"; pwd) [root@dabu.info

在Java中获取系统属性

在Java中获取系统属性 大庆油田有限责任公司 苏洋  01-5-22 上午 11:12:51 -------------------------------------------------------------------------------- Java语言以其面向对象.跨平台.可移植性好.安全性高等优点,受到众多编程人员的青睐,越来越多的人将其作为应用软件开发语言的首选. 在Java应用程序运行时,特别是需要在跨平台工作环境下运行时,需要确定操作系统类型.用户JDK版本和用户工作目

ASP.NET技巧:一个在移动设备中获取路径的方法

asp.net|技巧 一个在移动设备中获取路径的常用方法:public string GetFileName(){  return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase),"filename");}      在移动设备开发中,路径都使用绝对路径.System.IO.Path.G

在ASP.NET中获取文件属性

asp.net 在ASP.NET中获取文件属性(Retrieving File Information In ASP.NET)By Steven Smith 使用ASP.NET我们可以很容易的得到文件的相关信息,包括:文件名.路径.扩展名.大小和创建以及使用日期等.下面,我们就通过一段代码看看如何取得文件的相关信息. 如果我们使用典型的ASP来获取文件信息,它必须使用.FileSystemObjiect脚本对象来查询文件的有关信息.但在ASP.NET中,.FileSystemObject被Sys

.NET中获取电脑名,IP地址

ip地址 在.NET中获取一台电脑名,IP地址及当前用户名是非常简单,以下是我常用的几种方法,如果大家还有其它好的方法,可以回复一起整理: 1. 在ASP.NET中专用属性: 获取服务器电脑名: Page.Server.ManchineName 获取用户信息: Page.User 获取客户端电脑名:Page.Request.UserHostName 获取客户端电脑IP: Page.Request.UserHostAddress 2. 在网络编程中的通用方法: 获取当前电脑名: static Sy