c++ std::chrono:用最小值减去持续时间

l7mqbcuq  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(106)

我有以下代码:

auto start = std::chrono::steady_clock::now();
...
auto duration = std::chrono::steady_clock::now() - start;
return std::chrono::duration_cast<std::chrono::milliseconds>(
      std::chrono::milliseconds(getDelayBeforeNextExecution()) - duration);

换句话说,该函数返回下一次执行之前的时间,但它应该考虑它花了多长时间(所以如果下一次执行是在20秒内,但我花了6秒,它将只有14秒)。
我如何做持续时间的减法,但保持最小值(非负)?我是否需要显式地与chrono::zero进行比较并返回chrono::zero?

ntjbwcob

ntjbwcob1#

您可以将std::clamp与std::chrono::milliseconds::zero()的下限一起使用。

编辑std::max会更适合,正如德鲁在评论中指出的那样。

a64a0gku

a64a0gku2#

我建议使用time_point s,而不是duration s:

start += std::chrono::milliseconds(getDelayBeforeNextExecution());

然后在需要时使用_until()系列函数等待,例如:

std::this_thread::sleep_until(start);

如果start在过去,sleep_until将立即返回。

相关问题