返回临时将来的std :: async

时间:2015-09-23 06:22:02

标签: c++ c++11 asynchronous stl future

以下是en.cppreference.com

的摘要
  

如果从std :: async获取的std :: future具有临时对象   生命周期(不移动或绑定到变量),析构函数   std :: future将在完整表达式结束时阻塞,直到   异步操作完成,本质上是代码,如   跟随同步:

std::async(std::launch::async, []{ f(); }); // temporary's dtor waits for f()
std::async(std::launch::async, []{ g(); }); // does not start until f() completes

但是当我尝试使用VC ++时:

void fasync(char ch)
{
    for (int i = 0; i < 10; ++i)
    {
        this_thread::sleep_for(chrono::milliseconds(100));
        cout << ch << endl;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    async(launch::async, [] { fasync('+'); });
    async(launch::async, [] { fasync('*'); });

    this_thread::sleep_for(chrono::milliseconds(2000));

    return 0;
}

我有这样的东西

  

+   *   + *

     

* +

     

* +

     

*   +   * +

     

+ *

     

+ *

     

+ *

     

+ *

看起来没有人等待fasync('+')?

首先我认为这是因为睡眠而改变了fasync

for (int i = 0; i < 10; ++i)
{
    cout << ch << endl;
}
cin.get();

但是再次输出交错。

编辑:根据T.C.提供的链接。这是VS 2013的一个已知错误。

0 个答案:

没有答案