繁体   English   中英

0 作为 std::condition_variable::wait_for 中的超时

[英]0 as a timeout in std::condition_variable::wait_for

例如我有下一个代码:

void waitForResponse(const std::optional<int64_t>& ms){
    std::unique_lock lk{_mtx};
    _cv.wait_for(lk, std::chrono::milliseconds{ms ? *ms : 0}, []() {
            return someCondition;
        }
}

如果我将0作为持续时间参数传递,它是否在标准中指定? 是否等于下一个代码?:

void waitForResponse(const std::optional<int64_t>& ms){
    std::unique_lock lk{_mtx};
    _cv.wait_for(lk, []() {
            return someCondition;
        }
}

有开销吗?

根据工作草案和 C++11 标准第32.6.3节(工作草案), wait_for

等价于: return wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred));

所以当你经过

_cv.wait_for(lk, std::chrono::milliseconds{0}, []() return someCondition;}

你基本上是在打电话

_cv.wait_until(lk, chrono::steady_clock::now(), []() return someCondition;}

并且根据时序规范,function 在 chrono chrono::steady_clock::now() > C_t (C_t 传递给wait_until函数的时间点)时超时,基本上会立即超时(并因此返回)。

所以它是不同的

_cv.wait(lk, []() {
    return someCondition;
}

这将阻塞直到someCondition为真。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM