C++ std::chrono::系统时钟和持续时间<;双倍>;

C++ std::chrono::系统时钟和持续时间<;双倍>;,c++,c++11,stl,chrono,C++,C++11,Stl,Chrono,我可以使用以下方法测量时间: t1 = system_clock::now(); ... t2 = system_clock::now(); duration<double> d = t2 - t1; t1=system_clock::now(); ... t2=系统时钟::现在(); 持续时间d=t2-t1; 这编译得很好,但我如何做相反的呢?我想使用持续时间移动时间点 示例(不编译): system_clock::time_point tp1=system_clock::n

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

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

duration<double> d = t2 - t1;
t1=system_clock::now();
...
t2=系统时钟::现在();
持续时间d=t2-t1;
这编译得很好,但我如何做相反的呢?我想使用持续时间移动时间点

示例(不编译):

system_clock::time_point tp1=system_clock::now();
系统时钟:时间点tp2=tp1+持续时间(1.0);
系统时钟::时间点
“+”运算符似乎不接受
持续时间

如何通过使用时间(以秒为单位)(浮点值)指定的持续时间移动时间点?我需要使用
系统时钟
,因为它可以转换为
时间

这是你想要的吗

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();
system_clock::time_point tp1=system_clock::now();
系统时钟::时间点tp2=tp1+持续时间(持续时间(1.5));

cout好的,我选择了以下内容(因为VS2012可能在“duration_cast”中有一个bug)。要将以秒为单位指定的持续时间(使用浮点)添加到系统时钟时间点,请执行以下操作:

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(持续时间(楼层时间));
时间t=系统时钟::到时间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);
auto secs=seconds((seconds::rep)floor(dTimeS));
自动系统刻度=持续时间(秒);
时间t=系统时钟::到时间t(t1+系统时钟);

注:“to_time_t”的舍入行为(滴答到秒)未指定,如果我需要小数秒,我会单独提取。

将持续时间转换为整数版本(例如std::chrono::microseconds)?@MikeMB你能举个例子说明如何做到这一点吗?是否必须使用“duration::period”将浮点值转换为持续时间?请注意,
微秒
不保证是
系统时钟
的正确类型。您应该强制转换到
system_clock::duration
My编译器不接受'std::chrono::duration_强制转换(std::chrono::duration(1.5))'。错误:“”:无法从“\u CR”转换为“std::chrono::system\u clock::duration”。我使用的是VS2012,这是因为VS2012中有一个bug。有没有建议解决这个bug的方法?不幸的是,至少现在,我还停留在VS2012的过去。
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);