std :: future의 상태 가져 오기 있습니까? 내가

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특정 시간이 지난 후 또는 시스템 부하가 낮을 때 지연된 작업을 동 기적으로 실행하려는 경우 직접 확인하는 것이 좋습니다 .


답변

std :: future 에 대한 작업 에는 is_ready 멤버 함수 있습니다. 그 동안 VC 구현에는 _Is_ready () 멤버가 있습니다.


답변

첫 번째 방법은 wait_for기간이 0 인 콜 을하고 future_status::ready, future_status::deferred또는 중 하나가 될 수있는 결과 코드를 확인하는 것입니다 future_status::timeout.

에서 cppreference 그들은 그 주장 valid() 결과를 사용할 수있는 경우 검사를 하지만, 표준은 말한다 valid()반환 true하는 경우 *this공유 상태를 말한다 그 상태인지 여부를 독립적으로, 준비 여부.