我正在使用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
我误解了什么吗?
答案 0 :(得分:3)
是。围绕f
的大括号引入了一个新范围,并且因为f
在该范围内定义,所以当该范围结束时它将被销毁。紧接着,然后f
将阻止。从技术上讲,它应该每秒打印Foo
。
但实际输出更有趣。你的编译器交错了两个无限循环,it isn't allowed to do(因为你的循环有副作用),因为C ++ 11(我猜VS2013还不完全符合C ++ 11标准)。