获取当前时间点的毫秒值,对std::chrono类的简单小结

2023-10-26

C++11 std::chrono主要类与函数总结:duration、time_point、system_clock、duration_cast(f)

先来看一段获取当前毫秒值的代码,我们根据这个代码进行拆分学习

#include <iostream>
#include <chrono>
int main()
{
    // 重点语句
    long long res = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
    std::cout << res << std::endl;
    return 0;
}

1、std::chrono::duration_cast<>()函数

template <class ToDuration, class Rep, class Period>

constexpr ToDuration duration_cast(const duration<Rep,Period>& dtn);

这个函数主要用于将dtn(本身也是一个duration)的值转换为其他的duration类型;

使用方式:

/*
其中duration的类型有
std::chrono::hours
std::chrono::minutes
std::chrono::seconds
std::chrono::milliseconds
std::chrono::microseconds
std::chrono::nanoseconds
这些类型使用typedef定义的,详见std::chrono::duration
*/
std::chrono::duration_cast<otherDurationType>(dtnDuration);

2、std::chrono::duration类型

template <class Rep, class Period = ratio<1> >

class duration;

A duration object expresses a time span by means of a count and a period

一个duration对象通过count和period来表示一个时间跨度(time span).

Internally, the object stores the count as an object of member type rep (an alias of the first template parameter, Rep), which can be retrieved by calling member function count.

大体意思就是Rep有一个alias叫rep,这个rep是内部定义count变量的类型,要获取这个count的值可以直接调用count()函数。

下面是一些便于定义的duration的实例

type Period
hours ratio<3600, 1>
minutes ratio<60, 1>
seconds ratio<1, 1>
milliseconds ratio<1, 1000>
microseconds ratio<1, 1000000>
nanoseconds ratio<1, 1000000000>

类中最重要的函数count()用来获取

count()函数的返回类型就是template中的Rep类型,可以使用typeid()函数来获取,示例代码如下

// 代码运行在64位centos上,其他位数机器可能不一样
#include <iostream>
#include <chrono>
#include <typeinfo> // typeid
int main()
{
    std::chrono::milliseconds m(1000);// 1秒
    std::cout << typeid(m).name() << std::endl;
    std::cout << typeid(m.count()).name() << std::endl; // l(小写的L,就是long)
    return 0;
}

3、std::chrono::system_clock类

class system_clock;

Clock类提供当前time_point的访问

特别的,system_clock是一个全系统的实时时钟。

类的一些静态方法

3.1、now()

static time_point now() noexcept;

返回system_clock的当前time_point,time_point详见std::chrono::time_point类

3.2、to_time_t和from_time_t

用于和time_t类型的转换

4、std::chrono::time_point类

template <class Clock, class Duration = tyename Clock::duration>
    class time_point;

time_point表示相对于一个时钟纪元(clock’s epoch)的时间点

类的一些成员函数

time_since_epoch()

该函数返回一个duration对象,表示epoch和这个time point的时间跨度(time span)
这个epoch是1970年1月1号000000

小结:

通常程序中会出现获取当前时间的毫秒值、秒数、纳秒值等等时间点我们都可以用这段代码

#include <chrono>

/*
typedef:
hours
minutes
seconds
milliseconds
microseconds
nanoseconds
*/
auto res = std::chrono::duration_cast<std::chrono::[typedef]>(std::chrono::system_clock::now().time_since_epoch()).count();

参考:

http://www.cplusplus.com/reference/chrono/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取当前时间点的毫秒值,对std::chrono类的简单小结 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐