Timer function to provide time in nano seconds using C++

前端 未结 16 2343
野趣味
野趣味 2020-11-22 06:02

I wish to calculate the time it took for an API to return a value. The time taken for such an action is in the space of nano seconds. As the API is a C++ class/function, I a

16条回答
  •  忘掉有多难
    2020-11-22 06:32

    For C++11, here is a simple wrapper:

    #include 
    #include 
    
    class Timer
    {
    public:
        Timer() : beg_(clock_::now()) {}
        void reset() { beg_ = clock_::now(); }
        double elapsed() const {
            return std::chrono::duration_cast
                (clock_::now() - beg_).count(); }
    
    private:
        typedef std::chrono::high_resolution_clock clock_;
        typedef std::chrono::duration > second_;
        std::chrono::time_point beg_;
    };
    

    Or for C++03 on *nix,

    class Timer
    {
    public:
        Timer() { clock_gettime(CLOCK_REALTIME, &beg_); }
    
        double elapsed() {
            clock_gettime(CLOCK_REALTIME, &end_);
            return end_.tv_sec - beg_.tv_sec +
                (end_.tv_nsec - beg_.tv_nsec) / 1000000000.;
        }
    
        void reset() { clock_gettime(CLOCK_REALTIME, &beg_); }
    
    private:
        timespec beg_, end_;
    };
    

    Example of usage:

    int main()
    {
        Timer tmr;
        double t = tmr.elapsed();
        std::cout << t << std::endl;
    
        tmr.reset();
        t = tmr.elapsed();
        std::cout << t << std::endl;
        return 0;
    }
    

    From https://gist.github.com/gongzhitaao/7062087

提交回复
热议问题