一般来说超时机制分为两种:

  • 延迟超时(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