获取当前时间点的毫秒值,对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类的简单小结 的相关文章

随机推荐