std::future
완료 여부를 확인할 수 있습니까? 내가 할 수있는 유일한 방법은 wait_for
기간이 0 으로 전화를 걸어 상태가 있는지 확인하는 것입니다 ready
.하지만 더 좋은 방법이 있습니까?
답변
당신은 정확 wait_until
하고 과거의 시간 (동등한)으로 부르는 것 외에 더 좋은 방법은 없습니다.
더 편리한 구문을 원한다면 항상 작은 래퍼를 작성할 수 있습니다.
template<typename R>
bool is_ready(std::future<R> const& f)
{ return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }
NB 함수가 지연되면 true를 반환하지 않으므로 wait_for
특정 시간이 지난 후 또는 시스템 부하가 낮을 때 지연된 작업을 동 기적으로 실행하려는 경우 직접 확인하는 것이 좋습니다 .
답변
답변
첫 번째 방법은 wait_for
기간이 0 인 콜 을하고 future_status::ready
, future_status::deferred
또는 중 하나가 될 수있는 결과 코드를 확인하는 것입니다 future_status::timeout
.
에서 cppreference 그들은 그 주장 valid()
결과를 사용할 수있는 경우 검사를 하지만, 표준은 말한다 valid()
반환 true
하는 경우 *this
공유 상태를 말한다 그 상태인지 여부를 독립적으로, 준비 여부.