为什么std :: future不会阻塞

时间:2017-08-09 02:42:50

标签: c++ c++11

我正在使用VS2013 我刚读了this,发现未来应该阻止它的析构函数。

我尝试了一些代码,但std::future没有阻止。

void PrintFoo()
{
    while (true)
    {
        std::cout << "Foo" << std::endl;
        Sleep(1000);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    {
        auto f = std::async(std::launch::async, PrintFoo);
    }
    while (true)
    {
        Sleep(1000);
        std::cout << "Waiting" << std::endl;
    }
    std::cout << "Before application end" << std::endl;
    return 0;
}

我有输出:

Foo
Waiting
Foo
Waiting

我误解了什么吗?

1 个答案:

答案 0 :(得分:3)

是。围绕f的大括号引入了一个新范围,并且因为f在该范围内定义,所以当该范围结束时它将被销毁。紧接着,然后f将阻止。从技术上讲,它应该每秒打印Foo

但实际输出更有趣。你的编译器交错了两个无限循环,it isn't allowed to do(因为你的循环有副作用),因为C ++ 11(我猜VS2013还不完全符合C ++ 11标准)。