zoukankan      html  css  js  c++  java
  • windows和linux平台下的通用时间测试函数

    Time.cpp

    //////////////////////////////////////////////////////////////////////////////
    // Timer.cpp
    // =========
    // High Resolution Timer.
    // This timer is able to measure the elapsed time with 1 micro-second accuracy
    // in both Windows, Linux and Unix system 
    //
    //  AUTHOR: Song Ho Ahn (song.ahn@gmail.com)
    // CREATED: 2003-01-13
    // UPDATED: 2006-01-13
    //
    // Copyright (c) 2003 Song Ho Ahn
    //////////////////////////////////////////////////////////////////////////////
    
    #include "Timer.h"
    #include <stdlib.h>
    
    ///////////////////////////////////////////////////////////////////////////////
    // constructor
    ///////////////////////////////////////////////////////////////////////////////
    Timer::Timer()
    {
    #ifdef WIN32
        QueryPerformanceFrequency(&frequency);
        startCount.QuadPart = 0;
        endCount.QuadPart = 0;
    #else
        startCount.tv_sec = startCount.tv_usec = 0;
        endCount.tv_sec = endCount.tv_usec = 0;
    #endif
    
        stopped = 0;
        startTimeInMicroSec = 0;
        endTimeInMicroSec = 0;
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // distructor
    ///////////////////////////////////////////////////////////////////////////////
    Timer::~Timer()
    {
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // start timer.
    // startCount will be set at this point.
    ///////////////////////////////////////////////////////////////////////////////
    void Timer::start()
    {
        stopped = 0; // reset stop flag
    #ifdef WIN32
        QueryPerformanceCounter(&startCount);
    #else
        gettimeofday(&startCount, NULL);
    #endif
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // stop the timer.
    // endCount will be set at this point.
    ///////////////////////////////////////////////////////////////////////////////
    void Timer::stop()
    {
        stopped = 1; // set timer stopped flag
    
    #ifdef WIN32
        QueryPerformanceCounter(&endCount);
    #else
        gettimeofday(&endCount, NULL);
    #endif
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // compute elapsed time in micro-second resolution.
    // other getElapsedTime will call this first, then convert to correspond resolution.
    ///////////////////////////////////////////////////////////////////////////////
    double Timer::getElapsedTimeInMicroSec()
    {
    #ifdef WIN32
        if(!stopped)
            QueryPerformanceCounter(&endCount);
    
        startTimeInMicroSec = startCount.QuadPart * (1000000.0 / frequency.QuadPart);
        endTimeInMicroSec = endCount.QuadPart * (1000000.0 / frequency.QuadPart);
    #else
        if(!stopped)
            gettimeofday(&endCount, NULL);
    
        startTimeInMicroSec = (startCount.tv_sec * 1000000.0) + startCount.tv_usec;
        endTimeInMicroSec = (endCount.tv_sec * 1000000.0) + endCount.tv_usec;
    #endif
    
        return endTimeInMicroSec - startTimeInMicroSec;
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // divide elapsedTimeInMicroSec by 1000
    ///////////////////////////////////////////////////////////////////////////////
    double Timer::getElapsedTimeInMilliSec()
    {
        return this->getElapsedTimeInMicroSec() * 0.001;
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // divide elapsedTimeInMicroSec by 1000000
    ///////////////////////////////////////////////////////////////////////////////
    double Timer::getElapsedTimeInSec()
    {
        return this->getElapsedTimeInMicroSec() * 0.000001;
    }
    
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // same as getElapsedTimeInSec()
    ///////////////////////////////////////////////////////////////////////////////
    double Timer::getElapsedTime()
    {
        return this->getElapsedTimeInSec();
    }
    //////////////////////////////////////////////////////////////////////////////
    // Timer.h
    // =======
    // High Resolution Timer.
    // This timer is able to measure the elapsed time with 1 micro-second accuracy
    // in both Windows, Linux and Unix system 
    //
    //  AUTHOR: Song Ho Ahn (song.ahn@gmail.com)
    // CREATED: 2003-01-13
    // UPDATED: 2006-01-13
    //
    // Copyright (c) 2003 Song Ho Ahn
    //////////////////////////////////////////////////////////////////////////////
    
    #ifndef TIMER_H_DEF
    #define TIMER_H_DEF
    
    #ifdef WIN32   // Windows system specific
    #include <windows.h>
    #else          // Unix based system specific
    #include <sys/time.h>
    #endif
    
    
    class Timer
    {
    public:
        Timer();                                    // default constructor
        ~Timer();                                   // default destructor
    
        void   start();                             // start timer
        void   stop();                              // stop the timer
        double getElapsedTime();                    // get elapsed time in second
        double getElapsedTimeInSec();               // get elapsed time in second (same as getElapsedTime)
        double getElapsedTimeInMilliSec();          // get elapsed time in milli-second
        double getElapsedTimeInMicroSec();          // get elapsed time in micro-second
    
    
    protected:
    
    
    private:
        double startTimeInMicroSec;                 // starting time in micro-second
        double endTimeInMicroSec;                   // ending time in micro-second
        int    stopped;                             // stop flag 
    #ifdef WIN32
        LARGE_INTEGER frequency;                    // ticks per second
        LARGE_INTEGER startCount;                   //
        LARGE_INTEGER endCount;                     //
    #else
        timeval startCount;                         //
        timeval endCount;                           //
    #endif
    };
    
    #endif // TIMER_H_DEF

     调用方式:

    #include "Timer.h"
    Timer timer;        //    timer
    double elapsedTime;    //    time in millisecond
    double  avgtime = 0;
    double testnum = 0;
    void timebegin()
    {
        timer.start();
    }
    
    void timeend(string str)
    {
        elapsedTime = timer.getElapsedTimeInMilliSec();
        avgtime += elapsedTime;
        str = str + "time is: ";// %lf ms
    ";
        cout << str << elapsedTime << "ms" << endl;
    }
  • 相关阅读:
    localStorage、sessionStorage详解,以及storage事件使用
    企业和开发人员究竟该如何适应web标准?
    平面设计常用制作尺寸
    git命令
    TCP/IP、Http、Socket的区别
    canvas
    《千克》
    《小数的加法》
    fiddler设置代理
    《分数的基本性质》
  • 原文地址:https://www.cnblogs.com/adong7639/p/4689836.html
Copyright © 2011-2022 走看看