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;
编译没问题,但我该怎么做呢?我想用duration移动一个时间点?
示例(不编译):
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' 的舍入行为(滴答到秒)未指定,如果我需要小数秒,我会单独提取它。
我可以使用以下方法测量时间:
t1 = system_clock::now();
...
t2 = system_clock::now();
duration<double> d = t2 - t1;
编译没问题,但我该怎么做呢?我想用duration移动一个时间点?
示例(不编译):
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' 的舍入行为(滴答到秒)未指定,如果我需要小数秒,我会单独提取它。