【发布时间】:2014-04-08 10:42:16
【问题描述】:
将延续附加到boost::future 时,延续在新线程中执行:
std::cout << "main: " << boost::this_thread::get_id() << std::endl;
boost::promise<void> p;
boost::future<void> f = p.get_future();
p.set_value();
boost::future<void> f2 = f.then([] (boost::future<void>) {
std::cout << "future: " << boost::this_thread::get_id() << std::endl;
});
这个 sn-p 输出:
main: 0x7fff7a8d7310
future: 0x101781000
为什么.then() 允许这样做,更重要的是,有没有办法自定义这种行为?从promise/packaged_task/async 返回的futures 行为是否不同?
【问题讨论】:
-
我想 .then() 在这方面就像 async() 。是的,从异步返回的期货与直接从承诺(或打包任务)获得的期货之间存在细微差别。我认为是 Scott Meyer 最详细地描述了这一点(实际上认为这是当前标准的一个坏属性)。那里还应该有 boost::launch::deferred/async 参数,比如 async
标签: c++ multithreading c++11 boost