如果我有以下时钟,并使用它来计算自时钟时代以来的时钟计数,那么这个计数实际上代表了什么。std :: chrono time_since_epoch的默认持续时间
std::chrono::high_resolution_clock::now().time_since_epoch().count();
例如,我只是跑这个,并得到1389375799048790227
。这个数字是什么意思?是纳秒,微秒等吗?
如果我有以下时钟,并使用它来计算自时钟时代以来的时钟计数,那么这个计数实际上代表了什么。std :: chrono time_since_epoch的默认持续时间
std::chrono::high_resolution_clock::now().time_since_epoch().count();
例如,我只是跑这个,并得到1389375799048790227
。这个数字是什么意思?是纳秒,微秒等吗?
持续时间的类型是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从你得到结果的时刻开始。
你可以随时使用duration_cast
using namespace std::chrono;
auto time = duration_cast<seconds>(high_resolution_clock::now().time_since_epoch());
现在time.count()
将返回的秒数将它转换为所需的时间单位。
是的,我知道我可以将它转换成别的东西。但是我问的是如果我不施放它会发生什么?我只是调用'time_since_epoch()'返回一个持续时间,然后调用'count()'。这个数字意味着什么?这算什么? –
@SeanLynch它是自该时钟的时代(在时间点和时代之间)开始的时钟滴答数。 tick的长度取决于标准库实现的'high_resolution_clock',类似地,纪元也由标准库实现定义。 – dyp
可以使用的伎俩从斯科特迈尔斯有效的现代C++项目4使编译器显示类型的错误消息,比如:
#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> >
因此,无论平台ideone在运行,std::chrono::time_point::time_since_epoch()
返回一个std::chrono::duration
与滴答周期1/1000000000秒,或1纳秒。所以在那段时间调用count()
会返回纳秒。
我想说,这取决于'high_resolution_clock'的duration类型。检查它(嵌套的typedef)或使用'duration_cast'到一个已知的持续时间类型。 – dyp
请参阅http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch – dyp