std :: chrono time_since_epoch的默认持续时间

时间:2014-01-10 17:47:39

标签: c++ c++11 chrono

如果我有以下时钟并使用它来获取自时钟时代以来的滴答计数,那么这个计数实际代表了什么。

std::chrono::high_resolution_clock::now().time_since_epoch().count();

例如,我刚刚运行了这个并获得了1389375799048790227。这个数字是什么意思?是纳秒,微秒等吗?

3 个答案:

答案 0 :(得分:4)

持续时间的类型为std::chrono::high_resolution_clock::duration。您可以使用std::chrono::high_resolution_clock::duration::period::numstd::chrono::high_resolution_clock::duration::period::den检查持续时间的计价周期。这是一个分数的分子和分母,表示每个滴答的秒数(例如,1/1000000000,纳秒)。

这个时代没有具体说明,但是当你得到那个结果时,你的时间是1389375799048790227。

答案 1 :(得分:3)

您始终可以使用duration_cast

将其投放到所需的时间单位
using namespace std::chrono;
auto time = duration_cast<seconds>(high_resolution_clock::now().time_since_epoch());

现在time.count()将返回秒数。

答案 2 :(得分:1)

你可以使用Scott Meyers&#39;的第4项中的技巧。 Effective Modern C ++ 使编译器在错误消息中显示类型,如下所示:

#include <chrono>

template < typename T >
struct TypeDiscloser;

int main() {
    auto epoch_time = std::chrono::high_resolution_clock::now().time_since_epoch();
    TypeDiscloser< decltype( epoch_time ) > dummyVar;
}

ideone上,这会产生以下编译器错误:

prog.cpp: In function 'int main()':
prog.cpp:9:42: error: aggregate 'TypeDiscloser<std::chrono::duration<long long int, std::ratio<1ll, 1000000000ll> > > dummyVar' has incomplete type and cannot be defined
  TypeDiscloser< decltype( epoch_time ) > dummyVar;
                                          ^

从编译器错误中,类型为:

std::chrono::duration<long long int, std::ratio<1ll, 1000000000ll> >

因此,无论在哪个平台上运行,std::chrono::time_point::time_since_epoch()都会返回std::chrono::duration,其滴答周期为1/1000000000秒,或1纳秒。因此,在该持续时间内调用count()会返回纳秒。