我有以下代码:
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?
2条答案
按热度按时间ntjbwcob1#
您可以将std::clamp与std::chrono::milliseconds::zero()的下限一起使用。
编辑:std::max会更适合,正如德鲁在评论中指出的那样。
a64a0gku2#
我建议使用
time_point
s,而不是duration
s:然后在需要时使用
_until()
系列函数等待,例如:如果
start
在过去,sleep_until
将立即返回。