目录
[1. 引言](#1. 引言)
[2. wait_for的返回值含义](#2. wait_for的返回值含义)
[2.1 不带谓词的版本](#2.1 不带谓词的版本)
[2.2 带谓词的版本](#2.2 带谓词的版本)
1. 引言
条件变量std::condition_variable可以用来唤醒其他线程,也可以通过它等待其他线程唤醒自己。
在它的成员函数中,既可以通过调用wait等待其他线程,也可以使用wait_for来指定等待的时间。
其中wait_for有两种形式,一种可以带谓词,一种不带谓词。源码如下所示:
cpp
// 这是不带谓词的版本
template< class Rep, class Period >
std::cv_status wait_for( std::unique_lock<std::mutex>& lock,
const std::chrono::duration<Rep, Period>& rel_time);
// 这是带谓词的版本
template< class Rep, class Period, class Predicate >
bool wait_for( std::unique_lock<std::mutex>& lock,
const std::chrono::duration<Rep, Period>& rel_time,
Predicate pred);
需要注意的是,他们的返回值不同,返回值的含义也不相同。
2. wait_for的返回值含义
2.1 不带谓词的版本
首先来看不带谓词的版本,返回值是std::cv_status。其定义如下,可以通过枚举值来判断是否超时。
cpp
enum class cv_status { no_timeout, timeout };
2.2 带谓词的版本
带谓词的版本返回值是bool值,它的含义是如果经过指定的时间后谓词仍然为false,则返回false,否则返回true。