一般来说超时机制分为两种:
- 延迟超时(duration-based timeout):线程根据指定的时长而继续等待,一般以wait_for结尾
- 绝对超时(absolute timeout):在特定时间点来临之前线程一直等待,一般以until_for结尾
等待某个future进入就绪状态,并以35ms为限
std::future<int> f = std::async(some_task);
if (f.wait_for(std::chrono::milliseconds(35)) == std::future_status::ready) {
do_sth_with(f.get());
}
假定某目标事件与条件变量相关,若我们最多可以等待500ms:
std::condition_variable cv;
bool done;
std::mutex mtx;
bool wait_loop() {
auto const timeout = std::chrono::steady_clock::now() + std::chrono::milliseconds(500);
std::unique_lock<std::mutex> lk(mtx);
while (!done) {
if (cv.wait_until(lk, timeout) == std::cv_status::timeout) {
break;
}
}
return done;
}s
No comments yet.