Согласно рабочему проекту и стандартному разделу 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;}
и, соответственно,согласно временным характеристикам , функция отключается, когда chrono::steady_clock::now()
> C_t (C_t точка времени, переданная функции wait_until
), что приведет к таймауту (и, следовательно, возврату) в основном немедленно.
И поэтому он отличается от
_cv.wait(lk, []() {
return someCondition;
}
, который будет блокироваться, пока someCondition
не станет истинным.