Ожидание wait_for с предикатом в C++
Метод wait_for у std::condition_variable
возвращает статус ожидания, если предикат
не успел стать истинным за заданный интервал.
Поток подождет несколько миллисекунд, пока флаг не поднимут снаружи:
#include <chrono>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <thread>
int main() {
std::mutex mx;
std::condition_variable cv;
bool done = false;
std::thread worker([&]() {
std::unique_lock<std::mutex> lock(mx);
cv.wait_for(lock, std::chrono::milliseconds(50), [&]() {
return done;
});
std::cout << "seen\n";
});
{
std::lock_guard<std::mutex> lock(mx);
done = true;
}
cv.notify_one();
worker.join();
return 0;
}
Используйте wait_for на 20 мс с предикатом. Главный поднимает флаг и уведомляет поток.