繁体   English   中英

std :: chrono :: system_clock和持续时间<double>

[英]std::chrono::system_clock and duration<double>

我可以使用以下方法测量时间:

t1 = system_clock::now();
...
t2 = system_clock::now();

duration<double> d = t2 - t1;

这样编译就可以了,但是我该怎么做呢? 我想使用持续时间移动时间点吗?

示例(不编译):

system_clock::time_point tp1 = system_clock::now();
system_clock::time_point tp2 = tp1 + duration<double>(1.0);

system_clock::time_point '+'运算符似乎不接受duration<double>

如何以一个以秒为单位的时间(浮点值)指定的持续时间来移动时间点? 我需要使用system_clock因为它可以转换为time_t

这是你想要的吗?

system_clock::time_point tp1 = system_clock::now(); 
system_clock::time_point tp2 = tp1 + duration_cast<system_clock::duration>(duration<double>(1.5));
cout << duration_cast<milliseconds>(tp2 - tp1).count();

输出:差异为1500ms

现场演示

好的,我继续以下(看到VS2012可能在“ duration_cast”中存在错误)。 要将以秒为单位(使用浮点数)指定的持续时间添加到system_clock时间点:

const double SECS_TO_SYSTEM_TICKS = (double)system_clock::period::den / (double)system_clock::period::num;
system_clock::time_point tp1 = system_clock::now()
double dTimeS = 1.0;

...

system_clock::duration d((system_clock::rep)(floor(dTimeS) * SECS_TO_SYSTEM_TICKS));
time_t t = system_clock::to_time_t(t1 + d);

我使用“ floor(dTimeS)”只是因为在我的实现中,我不希望将小数秒取整到秒。

以下内容也应适用于较新的编译器(根据José的回答):

system_clock::duration d = duration_cast<system_clock::duration>(duration<double>(floor(dTimeS)));
time_t t = system_clock::to_time_t(t1 + d);

这也为我工作:

auto secs = seconds((seconds::rep)floor(dTimeS));
auto system_ticks = duration_cast<system_clock::duration>(secs);
time_t t = system_clock::to_time_t(t1 + system_ticks);

注意:未指定“ to_time_t”的舍入行为(以秒为单位),如果我需要小数秒,则将其单独提取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM