由于我无法控制的原因,我必须编写代码来执行以下操作:
boost::thread thread;
if (condition)
{
thread = boost::thread(function);
}
else
{
function();
}
<some more code here>
thread.join();
有没有比上面代码更好的方法呢?
不幸的是,我对我可以使用的解决方案非常有限,但欢迎任何建议/想法/意见。
答案 0 :(得分:3)
构建就绪或运行异步任务的未来。
答案 1 :(得分:3)
作为替代方案,std::future<void> fut;
if (condition)
{
fut = std::async(std::launch::async, function);
}
else
{
fut = std::async(std::launch::deferred, function);
fut.wait();
}
// some more code here
fut.wait()
可能会有所帮助,例如:
openssl ocsp -issuer AppleWWDRCA.pem -cert mycert.pem -text -url http://ocsp.apple.com/ocsp03-wwdr01 -header 'host' 'ocsp.apple.com'
答案 2 :(得分:2)
使用期货的另一种看法
std::future<void> fut;
if (condition)
{
fut = std::async(std::launch::async, function);
}
else
{
function();
std::promise<void> prom;
fut = prom.get_future();
prom.set_value();
// or std::experimental::make_ready_future() if avaliable
}
// some more code here
fut.wait()