gpt4 book ai didi

c++ - std::chrono::time_point 等价于 std::numeric_limits::infinity() 是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:14 25 4
gpt4 key购买 nike

假设我想以 CALL_PERIOD 间隔定期调用 my_func()

auto last_call_time = CHRONO_NEGATIVE_INFINITY;
while (true)
{
if (std::chrono::system_clock::now() - last_call_time > CALL_PERIOD)
{
last_call_time = std::chrono::system_clock::now();
my_func();
}
}

什么是合适的 CHRONO_NEGATIVE_INFINITY 这样的行

std::chrono::system_clock::now() - last_call_time > CALL_PERIOD

会在第一次运行时始终评估 true 吗?

我试过了 time_point::min()但这似乎不起作用

最佳答案

拥有像 std::optional 这样的类型的一个主要原因是我们不必像选择一个特定值来表示“不是一个值”这样的 hack:

std::optional<std::chrono::system_clock::time_point> last_call_time;
while (true)
{
auto curr = std::chrono::system_clock::now()
if (!last_call_time || (curr - *last_call_time) > CALL_PERIOD)
{
last_call_time = std::chrono::system_clock::now();
my_func();
}
}

如果 C++17 对您不可用,和/或您只是固执地使用选择特殊值的老技巧,您可以获得时钟的 rep 类型和计算它的最小可能整数:

using sys_clock = std::chrono::system_clock;
constexpr auto min_int = std::numeric_limits<sys_clock::rep>::min();
constexpr sys_clock::duration min_duration(min_int);
sys_clock::time_point min_time(min_duration);

当然,min_time 仍然是有效时间,因此它不同于 float 的任何“无限”表示。

关于c++ - std::chrono::time_point 等价于 std::numeric_limits::infinity() 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com