Kay*_*gle 9 c++ future packaged-task c++11 visual-studio-2012
似乎除非你打电话给std::async一个std::future遗嘱永远不会被设置为任何其他状态,future_status::deferred除非你打电话get或wait未来.即使任务已经运行并存储结果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)
}
Run Code Online (Sandbox Code Playgroud)
我没有当前的C++ 11标准,但是30.6.9中的草案标准说当a packaged_task运行时它应该将结果存储在未来的共享状态中.目前尚不清楚这是否包括设定预期wait_until/ wait_for行为.
此async呼叫中存在以前VS11行为问题:http://social.msdn.microsoft.com/Forums/hu/parallelcppnative/thread/4394f2c1-0404-40df-869b-f4fc36fc035c
此外,似乎其他编译器在这方面存在问题: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-包装任务
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |