我正在使用 VS2013。
我刚刚读了this并发现 future 应该在其析构函数中阻塞。
我尝试了一些代码,但 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
我是不是误会了什么?
最佳答案
是的。 f
周围的大括号引入了一个新范围,并且因为 f
是在该范围内定义的,所以当该范围结束时它将被销毁。紧随其后,f
将阻塞。所以从技术上讲,它应该每秒打印一次 Foo
。
但实际输出更有趣。你的编译器交错了两个无限循环,it isn't allowed to do (因为你的循环有副作用)自 C++11 以来(我猜 VS2013 还没有完全符合 C++11 标准)。
关于c++ - 为什么 std::future 不阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580838/