在 c++17 中用 std 替换 boost::timed_wait()

问题描述 投票:0回答:1

我有一个条件变量

std::condition_variable my_cond;

我希望能够用标准等效项替换

boost::timed_wait()

如果前面提到的条件变量是 boost 变量,那么我将使用

timed_wait()
的 boost 版本,如下所示:
cond_.timed_wait(lock,timeout);

其中

lock
std::scoped_lock lock(mutex_);
超时是用
boost::chrono
执行的时间。

boost:chrono
boost locks
boost mutexes
已替换为其标准类似物。我还没有找到
timed_wait()
的替代品。

我尝试找到一个属于 std 的函数,它接收锁作为第一个参数,并接收

std::chrono
类型时间作为第二个参数。 在这里查看
condition_variable::wait
的文档: https://en.cppreference.com/w/cpp/thread/condition_variable/wait

我没有看到第二个参数是时间类型的重载等待函数。

boost::timed_wait()
std::wait()
的转换可能吗?

c++11 boost mutex wait condition-variable
1个回答
0
投票

对于

boost
condition_variable::timed_wait
而言,在等待时间 duration 和等待时间 point 时会过载。并且不清楚您正在使用哪种重载。

std
中,这些函数的名称略有不同,而不是在相同的名称上重载:

  • 等待一段时间映射为
    wait_for
  • 等待某个时间点映射到
    wait_until

请参阅您链接到的页面的“另请参阅”部分:https://en.cppreference.com/w/cpp/thread/condition_variable/wait

对于

wait_for
,您可以使用任何
std::chrono::duration
实例化(
duration
是类模板)。常见的例子是
std::chrono::milliseconds
std::chrono::seconds

对于

wait_until
,您可以使用任何
std::chrono::time_point
实例化。常见的例子是
std::chrono::steady_clock::time_point
std::chrono::system_clock::time_point

© www.soinside.com 2019 - 2024. All rights reserved.