解决一个问题通常有多种方法, 我们总想找到最高效的,所以需要对比不同算法执行所用的时间。可惜的是,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++11标准之后,我们可以使用`<chrono>`库来获取高精度时间。`std::chrono::high_resolution_clock`是提供最高精度的时间戳的类,但它的实际精度取决于平台。在大多数现代系统上,它可以达到纳秒级别。 类的设计...
### 方法四:获取高精度时间差——`QueryPerformanceFrequency()` 和 `QueryPerformanceCounter()` 这是Windows API提供的高精度计时函数,可以获取到纳秒级别的精度。这两个函数需要包含 `<winbase.h>` 和 `...
4. 高精度时间差:`QueryPerformanceFrequency()` 和 `QueryPerformanceCounter()` 函数 这是Windows API提供的高级计时方法,适用于需要微秒甚至纳秒级精度的场合。这两个函数需要包含`<winbase.h>`和`<winnt.h>`...
"c++高精度时间纳秒"指的是能够获取并计算程序运行时精确到纳秒的时间戳,这对于微秒级或纳秒级的性能分析至关重要。下面将详细讨论相关知识点。 1. **时间类型和库**: - C++11引入了`<chrono>`库,它提供了对高...
在Windows操作系统中,获取高精度时间对于性能测试、基准测试以及调试等任务至关重要。`QueryPerformanceFrequency()` 和 `QueryPerformanceCounter()` 是两个Windows API函数,它们提供了比标准`GetTickCount()`或`...
在这个例子中,我们首先获取处理器的频率,然后记录开始和结束时间,最后计算时间差。注意,由于浮点运算的精度限制,实际结果可能无法精确到微秒,但总体上可以提供足够高的精度。 为了实现一个可重复触发的定时器...
- **原理**:通过记录当前时间和目标时间差,循环检测时间差是否达到设定阈值。 - **代码示例**: ```cpp COleDateTimestart_time = COleDateTime::GetCurrentTime(); COleDateTimeSpanend_time = COleDateTime::...
总之,在VC++中进行高精度计时,可以采用Windows API的`QueryPerformanceCounter`配合`QueryPerformanceFrequency`,或者使用C++11的`<chrono>`库。根据具体的应用场景和需求,选择合适的方法。同时,为了确保结果的...
通过两次调用`clock()`函数的时间差,可以计算出某个代码段的执行时间。需要注意的是,`clock()`函数返回的是`clock_t`类型的值,通常是以“节拍”为单位(每秒的“节拍”数可以通过`CLOCKS_PER_SEC`宏获得)。 ...
- `std::chrono`: C++11引入的高精度时间度量库,提供了`std::chrono::high_resolution_clock`、`std::chrono::duration`等类型,可以方便地计算时间间隔。 - `std::chrono::system_clock::now()`: 返回当前时间点...
通过理解这些代码,你可以为你的C++项目创建一个跨平台的时间获取工具,满足高精度时间需求。注意,虽然这种方法在VS2008和VS2010下经过了测试,但不同编译器和操作系统可能有不同的实现,所以实际应用时需做适当的...
在C++编程中,计时器是一个非常实用的工具,特别是在性能测试、代码优化和调试过程中。C++11引入了许多新的特性和功能,使得创建高效、可移植的计时器变得更加简单。在这个项目中,我们看到一个利用C++11特性实现的...
在VC++编程环境中,高精度计时器是一个非常重要的工具,尤其对于性能测试、调试以及时间敏感的应用程序来说。本文将深入探讨VC++中的高精度计时器,并提供相关使用方法和注意事项。 首先,让我们了解什么是高精度...
在VC++编程环境中,毫秒级的高精度时间统计对于性能测试、算法分析以及系统调试至关重要。本资源“vc++ 毫秒计时_高精度时间统计 .rar”提供了一种实现方法,帮助开发者精确测量代码执行的时间,从而优化程序性能。 ...
在C++中,获取时间戳的传统方式是使用`std::chrono`库,它提供了多种时间点和时间段类型,可以用来进行高精度时间操作。例如,`std::chrono::high_resolution_clock`是一个非常精确的时钟类型,通常能够达到微秒甚至...
在探讨C++中的精确计时方法时,我们主要关注的是如何通过直接利用Pentium CPU内部的时间戳来进行高精度的计时操作。这种方法相较于其他传统的计时手段(如`timeGetTime`或`QueryPerformanceCount`),能够提供更高的...
每个卫星都会发送包含其精确时间和位置的信息,接收器通过测量信号到达的时间差,可以反推出自身到各个卫星的距离,进而计算出三维位置。这个过程涉及到了复杂数学运算,包括三角定位和时间同步。 C++是实现这一...
`clock()`函数是C++标准库`<time.h>`中提供的一个用于获取程序运行时间的函数。它返回的是程序启动到调用`clock()`时刻的CPU时间(以clock tick为单位),通常用于衡量程序或特定代码段的执行时间。 #### 2. 使用`...
时差定位是通过测量信号到达多个接收站的时间差来确定信号源的位置。当一个信号从辐射源出发,同时到达至少三个或更多的接收器,通过比较这些接收器接收到信号的时间,可以计算出信号源的位置。这种方法的关键在于...