首页 > 编程语言 >c++ chrono头文件内Duration 、time_point和Clock

c++ chrono头文件内Duration 、time_point和Clock

时间:2024-08-23 12:57:48浏览次数:8  
标签:std 头文件 chrono auto clock point time duration

前言

        http://t.csdnimg.cn/eprLZ中介绍了关于chrono的基本操作,本文来介绍chrono与其他类的关系。

内容

Duration

        duration 表示一段时间间隔

 template<class Rep, class Period = std::ratio<1>> 
 class duration

        Rep表示持续时间的数值类型,如int、long long等。这个类型用于存储时间单位的数量上下限;

        Period(可选,默认为std::ration<1>):一个编译时常量时间周期,表示每个Rep单位代表的时间长度。

        std::ration是一个模板类,用于表示编译时的分数(分子和分母都是编译时常量)。默认情况下,Period是std::ration<1>,表示每个Rep单位代表1个时间单位(如秒、毫秒等,具体取决于上下文)。

        通过组合不同的Rep和Period可以表示不同的长度和精度的时间段,同时,标准库本身也提前预定义了一些类型

typedef duration <Rep, ratio<3600,1>> hours;                 // 小时
typedef duration <Rep, ratio<60,1>> minutes;                 // 分钟
typedef duration <Rep, ratio<1,1>> seconds;                  // 秒
typedef duration <Rep, ratio<1,1000>> milliseconds;          // 毫秒
typedef duration <Rep, ratio<1,1000000>> microseconds;       // 微秒
typedef duration <Rep, ratio<1,1000000000>> nanoseconds;     // 纳秒

        我们也可以自己定义自己所需要长度和精度的时间段;

// 以毫秒为时间单位的整数时间长度
std::chrono::duration<int, std::ratio<1, 1000>>
// 以纳秒为时间单位的长整形时间长度
std::chrono::duration<long long, std::ratio<1, 1000000000>> 

time_point

        time_point 表示一个时间点;

        原型:

template<class _Clock, class _Duration = typename _Clock::duration>
class time_point

        _Clock表示时钟类型,例如:std::chrono::system_clock , std::chrono::steady_clock和std::chrono::high_resolution_clock等

        _Clock::duration (可选,带默认值)表示一个持续时间类型;

        简单使用

std::chrono::time_point<std::chrono::steady_clock, std::chrono::duration<long long, std::nano>> start = std::chrono::steady_clock::now();


auto c = start.time_since_epoch().count();
cout<< c <<endl;

        time_point可以通过time_since_epoch成员函数获取从1970年1月1日0点0分0秒到到当前时间点的持续时间

        两个time_point进行减法运算

    auto start = std::chrono::steady_clock::now();
    for (int i = 0; i < 10000; i++)
    {
        for (auto j = 0; j < 10000; j++)
        {
        }
    }
    auto end = std::chrono::steady_clock::now();
    auto duration = end - start;
    std::cout << "dur::" << duration.count() << endl;

        为了方便,我使用auto自动推导类型,但是可以知道  start和end 都是time_point类型,

在进行减法运算后,得到一个duration类型值。也就是说两个时间点相减,得道一个时间段

Clock

        high_resolution_clock:高精度时钟

        system_clock:从系统获取的时钟

        steady_clock:不能被修改的时钟

        区别:

        system_clock是微秒精度且可调整,steady_clock和high_resolution_clock是纳秒精度不可调整。

    auto now = std::chrono::system_clock::now();
    auto now2 = std::chrono::steady_clock::now();
    auto now3 = std::chrono::high_resolution_clock::now();

    cout << "system_clock::" << now.time_since_epoch().count() << endl;
    cout << "system_clock::" << std::chrono::system_clock::is_steady << endl;
    cout << "system_clock::" << std::chrono::system_clock::period::den << endl;
    cout << "system_clock::" << std::chrono::system_clock::period::num << endl;

    cout << "steady_clock::" << now2.time_since_epoch().count() << endl;
    cout << "steady_clock::" << std::chrono::steady_clock::is_steady << endl;
    cout << "steady_clock::" << std::chrono::steady_clock::period::den << endl;
    cout << "steady_clock::" << std::chrono::steady_clock::period::num << endl;

    cout << "high_resolution_clock::" << now3.time_since_epoch().count() << endl;
    cout << "high_resolution_clock::" << std::chrono::high_resolution_clock::is_steady << endl;
    cout << "high_resolution_clock::" << std::chrono::high_resolution_clock::period::den << endl;
    cout << "high_resolution_clock::" << std::chrono::high_resolution_clock::period::num << endl;

参考

标签:std,头文件,chrono,auto,clock,point,time,duration
From: https://blog.csdn.net/m0_64240990/article/details/141459867

相关文章

  • [Paper Reading] HandDiff: 3D Hand Pose Estimation with Diffusion on Image-Point
    HandDiff:3DHandPoseEstimationwithDiffusiononImage-PointCloudHandDiff:3DHandPoseEstimationwithDiffusiononImage-PointCloud时间:CVPR2024机构:ETH&CMU&SungkyunkwanUniversityTL;DR将手部分3D点预测任务建模为点云生成任务,提出Handiff算法,以手部......
  • PointNetCFD-main
    #####Point-clouddeeplearningforpredictionoffluidflowfieldsonirregulargeometries(supervisedlearning)######Authors:AliKashefi([email protected])andDavisRempe([email protected])#Description:ImplementationofPointNetfor*super......
  • [oeasy]python0030_动态控制断点_breakpoints_debug_调试
     030_动态控制断点_breakpoints_debug_调试290播放·0赞同视频​设置断点_break_point_continue_运行到断点......
  • extern在头文件中添加是否必要?(C/C++)
    在C和C++编程中,extern关键字通常用于表示函数或变量的声明(而非定义),特别是在跨文件使用时。尽管在函数声明中使用extern不是强制性的,但它有特定的作用,尤其在变量声明方面。让我们深入探讨一下。1.函数声明的基本概念当你在头文件中声明一个函数时,通常只需要提供函......
  • OpenCV(logPolar()、Point2f())
    目录1.cv::logPolar()函数原型:参数说明:用途和示例:2.cv::Point2f类定义:属性:主要构造函数:用途和示例:总结:1.cv::logPolar()cv::logPolar()是OpenCV中用于进行对数极坐标变换(Log-PolarTransformation)的函数。对数极坐标变换将图像的空间坐标转换为极坐标,并对径向分量取对数......
  • SO-Net: Self-Organizing Network for Point Cloud Analysis
    Abstract本文提出了SO-Net,是一种创新的深度学习架构,为处理无序点云数据设计。SO-Net利用自组织映射(SOM)技术来捕捉点云的空间分布,并实现排列不变的特征提取。这种分层特征提取方法能够从局部到全局提取特征,还能够通过点到节点的k最近邻搜索系统地调整网络的receptivefield,从......
  • [oeasy]python029_ until_直接跳转到_unt_breakpoint_断点函数
     029调试中的跳转与断点228播放·0赞同视频​until_直接跳转到_unt_breakpoint_断点函数......
  • PointNet++笔记
    pointnet++论文题目为:PointNet++:DeepHierarchicalFeatureLearningonPointSetsinaMetricSpace。在这篇文章中,作者对pointnet进行了一些改进,因为原始的pointnet对于规模较大的点云时,性能就显得不够了。在论文的摘要开头也指出了这一点:“However,bydesignPointNetdo......
  • visual studio 2022版本中,scanf报错改为scanf_s才能运行的解决方法,添加万能头文件代码
    本文意在解决scanf报错改为scanf_s才能运行的问题,将深入探讨解决方案和操作手法。目录本文意在解决scanf报错改为scanf_s才能运行的问题,将深入探讨解决方案和操作手法。方法一:直接在程序头部添加方法二:路线和保存方式实操例子运用方法二时保存出现没有权限无法保存的解......
  • Avalonia 11.1 已知问题 应用启动时 PointToScreen 无法获取正确坐标
    本文记录Avalonia11.1版本的已知问题,在Linux上使用X11时,在应用启动时,即使在Loaded或Activated事件里,都无法使用PointToScreen获取到正确的屏幕坐标,只会将传入的点作为返回值此问题已经报告给Avalonia官方,请看https://github.com/AvaloniaUI/Avalonia/issues/1662......