我有一个多线程应用程序,其中一个循环等待用户输入作为主线程。在正确的输入下,它应该停止循环并等待所有其他线程结束。
为此,我创建了一个 std::list,其中放置了为线程创建创建的std::future对象。
std::list<std::future<int>> threads;
threads.emplace_front(std::async(std::launch::async, ...));
我曾经认为,让list超出范围应该会阻塞,直到所有线程返回其主函数,因为list的析构函数将销毁所有std::future元素,而这些元素的析构函数将等待线程结束。
编辑:由于它很相关,我在这里添加: 这是在安装了Visual Studio 2013 Professional的Win7上进行的测试。 /编辑
当我尝试时,它没有阻塞,我不得不添加
for (auto it = threads.begin(); it != threads.end(); ++it) {
it->get();
}
为了正确地阻塞,函数需要执行到末尾。
我是否理解有误,或者我需要以不同的方式创建线程,以实现我想要的功能?
std::async
的规范要求它阻塞。有趣... - T.C.