2012-10-08 3 views
9

당신이 std::async를 호출하지 않는 한 미래에 get 또는 wait를 호출하지 않는 한 std::futurefuture_status::deferred보다 다른 상태로 설정되지 않을 것으로 보인다. wait_for & wait_until은 작업이 이미 실행되어 결과를 저장 한 경우에도 계속 차단하지 않고 future_status::deferred을 반환합니다. 여기 표준 : 미래는

은 예입니다 : 나는 현재 C++ 11 표준이없는

#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 구현과 관련하여 문제가 있습니까?

업데이트 : http://connect.microsoft.com/VisualStudio/feedback/details/761829/c-11-unexpected-behavior-for-std-future-wait-for-and-std-packaged-task

+0

불행히도 VS 11 - Update 1을 사용하여 지연 상태를 얻습니다. 미래가 약속에서 가져올 때 (비동기와 함께 작동 할 때)입니다. 문제는 이전에 그들에게보고되었지만 여전히 기능하지는 않습니다. 실제로 std :: future를 사용하는 목적을 많은 경우 상쇄합니다. 최소한 부스트 1.51에서 작동합니다. – Ghita

답변

12

이 VS2012에 문제가 있습니다 : 나는 어떻게 든이에 대한 보고서를 놓쳤다. C++ 11 스레드 라이브러리를 구현할 때 몇 가지 버그가 있습니다. 나는 약간에 관하여 썼다 on my blog.

+0

감사! VS11 C++ 11 STL 지원이 그다지 좋지는 않지만 완전히 사용할 수 없게 될 것이라고 생각하지 않았습니다. 이러한 기능을 구현 한 부스트에 대한 의견 (비동기가 아니거나 아직 구현되지 않은 기능)은 무엇입니까? –

+0

부스트 구현은 일반적으로 구현 된 기능에 대해 튼튼합니다. 몇 가지 버그가 있지만, 우리는 이에 대해 연구 중입니다. Vicente는 빠진 C++ 11 기능을 연구하고 있습니다. –

+0

@AnthonyWilliams 부스트 지원에 감사드립니다. 이것에 의존 할 수있는 무언가입니다 – Ghita

관련 문제