异步函数调用C ++ 0x

时间:2010-12-13 05:48:37

标签: c++ c++11

我正在使用http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-8-futures-and-promises.html

中的代码测试std :: async函数
int calculate_the_answer_to_LtUaE(){
    sleep(5);
cout << "Aaa" << endl;
}

   std::future<int> the_answer=std::async(calculate_the_answer_to_LtUaE);
   the_answer.get();
   cout << "finish calling" << endl;
   sleep(10000);

我需要调用the_answer.get()来调用calculate_the_answer_to_LtUaE()并在屏幕上打印Aaa。如果我注释掉了the_answer.get()行,我就不会打印任何内容。这是std :: async函数的预期行为还是我在这里做错了什么?这是因为我认为the_answer.get()用于等待函数完成并检索结果。

感谢。

2 个答案:

答案 0 :(得分:5)

如果您阅读了与“发布政策”相关的内容,您会发现我的评论完全正确。你所看到的行为是完全允许的。

您可以使用启动政策强制执行您想要的操作:

std::future<int> the_answer=std::async(std::launch::async,calculate_the_answer_to_LtUaE);

答案 1 :(得分:4)

“std :: async的默认启动策略是std :: launch :: any,这意味着实现可以为您选择。”

您需要std::launch::async,基本上:

std::future<int> the_answer=std::async(std::launch::async, calculate_the_answer_to_LtUaE);
//                                     ^^^^^^^^^^^^^^^^^^

确保异步调用放在新线程中。否则它可能会推迟调用计算函数直到the_answer.get()并在当前线程中调用它。