我试图创建一个函数,将返回下一个完整的秒,但通过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()
的持续时间。
你可以将持续时间设置为秒:
#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';
}
您可以使用静态system_clock::to_time_t
方法获得time_t
对象。
time_t
通常是"seconds since epoch ",所以它已经四舍五入到seconds。
那么你可以使用system_clock::from_time_t
从time_t
获得一个system_clock::time_point
对象。
要确保to_time_t
真的将向上舍入,只需将舍入的时间点与初始时间点进行比较。
此解决方案的唯一问题是time_t
没有严格定义为以秒为单位,因此该解决方案可能不具有可移植性。