std::condition_variable.wait_for
时间: 2024-06-15 15:07:49 浏览: 296
std::condition_variable.wait_for()是C++中std::condition_variable类的一个成员函数,用于在指定时间内等待条件变量满足特定条件。它的语法如下:
```cpp
template< class Rep, class Period >
std::cv_status wait_for( std::unique_lock<std::mutex>& lock, const std::chrono::duration<Rep, Period>& timeout_duration );
```
其中,`lock`是一个std::unique_lock<std::mutex>对象,用于保护条件变量。`timeout_duration`是一个std::chrono::duration对象,表示等待的时间段。
当调用std::condition_variable.wait_for()时,当前线程会被阻塞,直到以下情况之一发生:
1. 条件变量满足特定条件;
2. 等待时间超过了指定的时间段。
如果等待时间超过了指定的时间段,std::condition_variable.wait_for()会返回std::cv_status::timeout,表示等待超时。
以下是一个使用std::condition_variable.wait_for()的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <condition_variable>
std::condition_variable cv;
std::mutex mtx;
bool ready = false;
void worker()
{
std::this_thread::sleep_for(std::chrono::seconds(2));
std::unique_lock<std::mutex> lock(mtx);
ready = true;
cv.notify_one();
}
int main()
{
std::cout << "Main thread starts." << std::endl;
std::thread t(worker);
std::unique_lock<std::mutex> lock(mtx);
if (cv.wait_for(lock, std::chrono::seconds(1)) == std::cv_status::timeout)
{
std::cout << "Timeout occurred." << std::endl;
}
else
{
std::cout << "Condition variable is notified." << std::endl;
}
t.join();
std::cout << "Main thread ends." << std::endl;
return 0;
}
```
在上面的示例中,主线程等待1秒钟,如果在1秒钟内没有收到通知,则输出"Timeout occurred.";如果在1秒钟内收到了通知,则输出"Condition variable is notified."。
阅读全文