如果我有以下时钟并使用它来获取自时钟时代以来的滴答计数,那么这个计数实际代表了什么。
std::chrono::high_resolution_clock::now().time_since_epoch().count();
例如,我刚刚运行了这个并获得了1389375799048790227
。这个数字是什么意思?是纳秒,微秒等吗?
答案 0 :(得分:4)
持续时间的类型为std::chrono::high_resolution_clock::duration
。您可以使用std::chrono::high_resolution_clock::duration::period::num
和std::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()
会返回纳秒。