c++ - 将 time_point 降低到给定持续时间的推荐方法

标签 c++ c++-chrono

我有一个用户提供的持续时间

const int period_seconds = cfg.period_seconds;

我想floor一个time_point到那个duration的粒度。

我看到 time_point 有一个 std::chrono::floor 函数和 duration ,但如何使用它们来完成我正在寻找的事情并不是很明显。

我有以下有效的玩具示例:

const auto seconds = std::chrono::seconds{period_seconds};
const auto period = std::chrono::duration_cast<std::chrono::nanoseconds>(seconds);
const auto now = std::chrono::system_clock::now();
const auto floored = now - (now.time_since_epoch() % period);

上述代码的净效果,对于 10 秒的持续时间如下:

now:     2022-04-19 15:06:26.781772408
floored: 2022-04-19 15:06:20.000000000    # so "floors" the 25.78 seconds to 20 seconds

我忍不住觉得根据 time_since_epoch 和模数运算符来工作并不是获得我正在寻找的结果的“正确”方式...

是否有“更好”/推荐的方法将 time_point 设置为某个用户提供的持续时间?

最佳答案

我觉得你的解决方案非常好。然而,它可以稍微简化。无需形成纳秒级精度 period。可以直接用seconds操作:

const auto floored = now - (now.time_since_epoch() % seconds);

关于c++ - 将 time_point 降低到给定持续时间的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71927290/

相关文章:

c++ - 将带有变量捕获的 lambda 表达式转换为函数指针

c++ - Chrono 程序中永远不会触发条件语句

c++ - 我可以使用什么 winapi C 函数调用将 unicode 转换为 ascii,反之亦然?

C++:istream如何在条件表达式中转换为bool

c++ - 向 Qt 项目添加状态对话框

c++ - 如何将 `duration_cast` 用于派生类?

C++ 11 std::chrono 测量时间流逝

c++ - 在整数 std::chrono::durations 之间转换

c++ - 我可以传递给 std::thread::sleep_for() 和 sleep_until() 的最大值是多少?

c++ - 如何从计算线程到GUI线程获取结果-我需要QSharedMemory吗?