首页 > 编程语言 >c++ 利用 chrono 打印时间

c++ 利用 chrono 打印时间

时间:2023-01-11 15:22:45浏览次数:42  
标签:chrono 打印 timer bool c++ time msg Type

c++ 利用 chrono 打印时间

自己封装的一个打印时间的类,可以打印秒、毫秒、微秒、纳秒。

头文件

#ifndef TIMER_H
#define TIMER_H
#include <chrono>

enum class Type {
    MS, //millisecond
    US, //microsecond
    NS, //nanosecond
    S   //second
};

class timer
{
    typedef std::chrono::steady_clock::time_point timePoint;
public:
    timer(const char *msg, Type type = Type::US, bool dumpOnDestruct = true, bool startOnConstruct = true);
    ~timer();

    void            getTime(bool cont = false);

protected:
    void            start();
    void            pause();

protected:
    const char*     _msg;
    bool            _dumpOnDestruct;
    bool            _active;
    Type            _type;
    timePoint       _startTime;
    timePoint       _endTime;
};

#endif // TIMER_H

源文件

#include "timer.h"
#include <string>


timer::timer(const char *msg, Type type, bool dumpOnDestruct, bool startOnConstruct)
    : _msg(msg), _dumpOnDestruct(dumpOnDestruct), _active(startOnConstruct), _type(type)
{
    if (_active)
        start();

}

timer::~timer()
{
    if (_dumpOnDestruct)
        pause();
}

void timer::start()
{
    _startTime = std::chrono::steady_clock::now();
}

void timer::pause()
{
    _endTime = std::chrono::steady_clock::now();
    double time;
    switch (_type) {
    case Type::MS:
        time = std::chrono::duration<double,std::milli>(_endTime - _startTime).count();
        printf("%s %6f ms\n", _msg, time);
        break;
    case Type::US:
        time = std::chrono::duration<double,std::micro>(_endTime - _startTime).count();
        printf("%s %6f us\n", _msg, time);
        break;
    case Type::NS:
        time = std::chrono::duration<double,std::nano>(_endTime - _startTime).count();
        printf("%s %6f ns\n", _msg, time);
        break;
    default:
        time = std::chrono::duration<double>(_endTime - _startTime).count();
        printf("%s %6f s\n", _msg, time);
        break;
    }
}

void timer::getTime(bool cont)
{
    pause();
    if (!cont) {
        start();
    }
}

标签:chrono,打印,timer,bool,c++,time,msg,Type
From: https://www.cnblogs.com/AngleLin/p/17043856.html

相关文章

  • 手撕AVL树(C++)
    阅读本文前,请确保您已经了解了二叉搜索树的相关内容(如定义、增删查改的方法以及效率等)。否则,建议您先学习二叉搜索树。本文假定您对二叉搜索树有了足够的了解。效率?众所......
  • 数组描述线性表(C++实现)
    线性表也称有序表,其每一个实例都是元素的一个有序集合抽象类linearList一个抽象类包含没有实现代码的成员函数,这样的成员函数称为纯虚函数,用数字0作为初始值来说明templ......
  • C++_运算符重载
    operatoroverloadingCustomizestheC++operatorsforoperandsofuser-definedtypes.std::addressofstd::addressof模板函数定义在<memory>头文件中,用于获取类或......
  • 三分钟教你学会打印京东电子面单
    快递鸟(KDN)对外提供的京东电子面单API接口可以实现自助打印京东电子面单,通过KDN打印出来的电子面单,京东快递员可上门揽件,下面就来教大家如何实现吧。​工具账号京东快递电子......
  • 驱动日志Level精确打印
    如何精确控制驱动程序的log输出?一、设定Level等级enum{DRV_MSG_ERR=0x0001,DRV_MSG_WARN=0x0002,DRV_MSG_INFO......
  • 怎么在C++中调用Python?C++调用python封装接口实例解析!
    看到标题很多小伙伴会问:不是都说python是胶水语言,他调用什么什么语言封装的库来做一些什么事情吗?怎么小编你这反而变成被调用的对象了呢?没错,常规情况下一般都是以python语......
  • Python实例浅谈之三Python与C/C++相互调用
    一、问题     Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结。二、Python调用C/C++1、Python调用C动态链接库       P......
  • C++_语言概览和资料
    C++C语言1969年-1973年完成,其出发点是为了编写Unix操作系统设计目标需求、背景和待解决问题 演化过程中,来自用户的反馈和语言实现者们积累的经验设计哲学:高效......
  • 浅析 C++ 调用 Python 模块
    作为一种胶水语言,Python 能够很容易地调用 C 、 C++ 等语言,也能够通过其他语言调用 Python 的模块。Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中......
  • C++ STL摘记
    一、string类补充1.函数示例:(1)find和rfind函数,返回的是下标或者string::nposindex=ss.find(s1,pos,num)find从pos(包括)开始往右查找(num的作用待补充)index=s......