당신이 std::async
를 호출하지 않는 한 미래에 get
또는 wait
를 호출하지 않는 한 std::future
가 future_status::deferred
보다 다른 상태로 설정되지 않을 것으로 보인다. wait_for
& wait_until
은 작업이 이미 실행되어 결과를 저장 한 경우에도 계속 차단하지 않고 future_status::deferred
을 반환합니다. 여기 표준 : 미래는
#include <future>
void main()
{
auto func = []() { return 5; };
auto asyncFuture = std::async(std::launch::async, func);
auto status = asyncFuture.wait_for(std::chrono::seconds(0)); // timeout (1)
auto deferredFuture = std::async(std::launch::deferred, func);
status = deferredFuture.wait_for(std::chrono::seconds(0)); // deferred (2)
std::packaged_task<int()> task(func);
auto packagedTaskFuture = task.get_future();
status = packagedTaskFuture.wait_for(std::chrono::seconds(0)); // deferred (2)
task();
status = packagedTaskFuture.wait_for(std::chrono::seconds(0)); // deferred (2)
packagedTaskFuture.wait();
status = packagedTaskFuture.wait_for(std::chrono::seconds(0)); // ready (0)
}
하지만, 30.6.9에서 초안 표준은 packaged_task
가 실행될 때는의 결과를 저장해야한다고 말한다 미래의 공유 상태. 예상치를 설정하는 것이 포함되는지 여부는 명확하지 않다. wait_until
/wait_for
. 다른 컴파일러는이 지역의 문제를 가지고있는 것처럼 또한 보인다 http://social.msdn.microsoft.com/Forums/hu/parallelcppnative/thread/4394f2c1-0404-40df-869b-f4fc36fc035c
을 :
이async
통화를 이전과 관련하여이 분야에서 VS11 동작에 문제가 있었다
C++ 11 future_status::deferred not working
표준 더 잘 아는 사람은 : 예상되는 동작입니까, 아니면 VS11 구현과 관련하여 문제가 있습니까?
불행히도 VS 11 - Update 1을 사용하여 지연 상태를 얻습니다. 미래가 약속에서 가져올 때 (비동기와 함께 작동 할 때)입니다. 문제는 이전에 그들에게보고되었지만 여전히 기능하지는 않습니다. 실제로 std :: future를 사용하는 목적을 많은 경우 상쇄합니다. 최소한 부스트 1.51에서 작동합니다. – Ghita