高精度的计时方法

API用法详见:https://docs.microsoft.com/zh-cn/windows/win32/api/profileapi/

下面为封装好的计时类:

#include <profileapi.h>

class CTimer
{
public:
    CTimer() : m_nElapsedTime(0)
    {
        QueryPerformanceFrequency(&m_nFrequency);
    }
    ~CTimer(){}
public:
    void Start()
    {
        QueryPerformanceCounter(&m_nBeginTime);
    }
    void Stop()
    {
        LARGE_INTEGER _nEndTime;
        QueryPerformanceCounter(&_nEndTime);
        m_nElapsedTime = (_nEndTime.QuadPart - m_nBeginTime.QuadPart) * 1000000 / m_nFrequency.QuadPart;
    }
    void Restart()
    {
        m_nElapsedTime= 0;
        QueryPerformanceCounter(&m_nBeginTime);
    }
    //微秒
    double GetTime_us()
    {
        return m_nElapsedTime;
    }
    //毫秒
    double GetTime_ms()
    {
        return m_nElapsedTime/ 1000.0;
    }
    //秒
    double GetTime_s()
    {
        return m_nElapsedTime/ 1000000.0;
    }

private:
    LARGE_INTEGER m_nFrequency;
    LARGE_INTEGER m_nBeginTime;
    double m_nElapsedTime;
};

原文地址:https://www.cnblogs.com/fr-ruiyang/p/12157755.html

时间: 2024-10-21 13:49:10

高精度的计时方法的相关文章

C语言中常用计时方法总结

转自:http://blog.csdn.net/fz_ywj/article/details/8109368 C语言中常用计时方法总结 1. time() 头文件:time.h 函数原型:time_t time(time_t * timer) 功能:返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数. 用time()函数结合其他函数(如:localtime.gmtime.asctime.ctime)可以获得当前系统时间或是标准时间. 用difft

linux 终端计时方法

经常需要在linux终端中测试性能,例如flash的读写性能.这就需要对一个操作进行计时. 以前一直用date命令,然后人工做减法操作来得到结果. 简单测测还行,如果长时间测试,这个人工费就上去了. 为了降低人工成本,今天查了些资料. 目的是得到一个操作花了多长时间,单位为秒. 首先查date命令,看如果得到当前的秒值. 参考了: http://www.2cto.com/os/201108/102154.html 得到秒值的命令:date +%s 接下来就是如果把两次得到的秒值分别保存,并作减法

递归很耗内存+多项式求值的两种方法+c语言计时方法

1.用for循环写一个函数,实现从1开始输出到N的正整数. 有两宗实现方法,一种是递归,另一种是非递归 //非递归 void PrintN1(int N){ int i; for(i=1;i<=N;i++){ printf("%d\n",i); } return; } //递归 递归对空间的需求很大,当数字很大的时候,需要很大的内存,当数字是十万的时候递归就崩了 void PrintN2(int N){ if(N){ PrintN2(N-1); printf("%d\n

陀螺仪高精度寻北方法

文字内容来源:https://www.douban.com/note/575862194/?from=mdouban 人们普遍认为是1850年法国的物理学家莱昂·傅科(J.Foucault)为了研究地球自转,发明了陀螺仪.那个时代的陀螺仪可以理解成把一个高速旋转的陀螺放到一个万向支架上面,这样因为陀螺在高速旋转时保持稳定,人们就可以通过陀螺的方向来辨认方向,确定姿态,计算角速度. 一.陀螺仪的发明 陀螺仪先后被用在航海上和航空上,因为飞机飞在空中,是无法像地面一样靠肉眼辨认方向的,危险性极高,所

高精度 高分辨率 计时函数 Linux

在优化程序过程中,经常性的要统计时间,尤其是科学计算程序,只有在理解每一个部分占用的时间的基础上,才能做进一步的优化和分析. 但是常规的时间函数精度比较低,对某个函数执行时间的测量可能得到的结果为零,但是循环次数很多的情况下又会占用很大的时间,此处你可能会说可以将其他的地方屏蔽掉来单纯测量某一个函数执行多次的时间,但是这样编译器可能会做一些优化,直接或间接地影响测量的准确性. Linux 环境下 POSIX提供了一个纳秒(ns=10^-9s)级别的测量函数,这样就不会出现因为某个函数的执行时间过

[转]使用Stopwatch类实现高精度计时

对一段代码计时同查通常有三种方法.最简单就是用DateTime.Now来进行比较了,不过其精度只有3.3毫秒,可以通过DllImport导入QueryPerformanceFrequency和QueryPerformanceCounter,实现高精度的计时,请参考<.net平台下获取高精度时间类>.在.NET 2.0中,新增了Stopwatch类处理计时需求,Stopwatch会优先使用高精度计时,仅当系统不支持时才会用DateTime来计时,可通过Stopwatch静态属性IsHighRes

Windows 各种计时函数总结

本文对Windows平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的 5种方法.分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在 Windows系统,也可以用于Linux系统.在Windows系统下三种,使用Windows提供的API接口timeGetTime(). GetTickCount()及QueryPerformanceCounter()来完成.文章最后给出了5种计时方法示例代码. 标准C/C++的

c++ windows下计时

多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 陈硕Blog.csdn.net/Solstice 自从 Intel Pentium 加入 RDTSC 指令以来,这条指令是 micro-benchmarking 的利器,可以以极小的代价获得高精度的 CPU 时钟周期数(Time Stamp Counter),不少介绍优化的文章[1]和书籍用它来比较两段代码的快慢.甚至有的代码用 RDTSC 指令来计时,以替换 gettimeofday() 之类的系统调用.在多核时代,RDTSC

高精度乘法程序

对于超过20位的数的乘法问题,我们无法使用普通的方法!!!即使是longlong也会超出范围的!像这样的数,我们只能使用高精度的知识利用数组的方法解决问题!对于高精度乘法的问题,其实思路和高精度加法的思路差不多,都需要使用字符数组来存放每次算完的结果!        1  2  3        *4  5  6    ________________      12  15  18   8  10  124  5   6  _____________________4 13   28   27