我正在尝试创建一个将返回下一整秒的函数,但是查看c ++ 11 std::chrono
文档,我找不到任何明显的方法来实现它。
示例:如果当前时间为09:50:01.1234
,我希望函数返回09:50:02.0000
(即下一整秒)。
std::chrono::system_clock::time_point return_next_full_second()
{
using namespace std::chrono;
system_clock::time_point now = system_clock::now();
system_clock::time_point next_full_second = // How?
return next_full_second;
}
有关如何完成此操作的任何提示,如果可能的话,使用std::chrono
?
我想要实现的目标是尽可能接近每一秒钟执行特定操作。所以我将使用结果睡眠return_next_full_second() - system_clock::now()
。
答案 0 :(得分:5)
您可以将持续时间转换为秒:
#include <chrono>
#include <iostream>
std::chrono::system_clock::time_point return_next_full_second()
{
using namespace std::chrono;
system_clock::time_point now = system_clock::now();
auto s = duration_cast<seconds>(now.time_since_epoch());
return system_clock::time_point(++s);
}
int main() {
using namespace std::chrono;
auto t = return_next_full_second();
auto d = duration_cast<milliseconds>(t.time_since_epoch());
std::cout << d.count() << '\n';
}
答案 1 :(得分:1)
您可以使用静态time_t
方法获取system_clock::to_time_t
个对象。
time_t
通常是“自纪元以来的秒数,所以它已经四舍五入到秒。
然后,您可以使用system_clock::from_time_t
从system_clock::time_point
获取time_t
个对象。
要确保to_time_t
真正围绕向上,只需将舍入时间点与初始时间点进行比较。如果它小于该时间点,只需添加一秒。
此解决方案的唯一问题是time_t
未严格定义为秒,因此解决方案可能无法移植。