gpt4 book ai didi

c++ - 0 作为 std::condition_variable::wait_for 中的超时

转载 作者:搜寻专家 更新时间:2023-10-31 02:01:42 24 4
gpt4 key购买 nike

例如我有下一个代码:

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 (int 工作草案),wait_for

Equivalent to: 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(), []() 返回 someCondition;}

并根据timing specifications ,当chrono::steady_clock::now() > C_t(C_t传递给wait_until函数的时间点)时函数超时,会超时(从而返回) 基本上立即。

所以它不同于

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

它将阻塞直到 someCondition 为真。

关于c++ - 0 作为 std::condition_variable::wait_for 中的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com