使用boost :: async w / o c ++ 11

时间:2016-03-17 17:50:47

标签: c++ c++11 asynchronous boost

我必须使用gcc 4.8.3 w / o C ++ 11。如果没有C ++ 11,则提升1.56 Ext.isIE ? pdfAsDataUri = me.convertDataURIToBinary(pdfAsDataUri): ''; convertDataURIToBinary: function(dataURI) { var BASE64_MARKER = ';base64,', base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length, base64 = dataURI.substring(base64Index), raw = window.atob(base64), rawLength = raw.length, array = new Uint8Array(new ArrayBuffer(rawLength)); for (var i = 0; i < rawLength; i++) { array[i] = raw.charCodeAt(i); } return array; },async的工作方式会有所不同。我猜future默认返回boost::async。 W / C ++ 11,boost::unique_future可以移动到unique_future。所以我可以做到

shared_future

W / o C ++ 11,我们需要用什么宏来制作相同的代码?我想我们需要明确地调用boost'move'?否则,返回的未来不能“投放”到共享的未来。

#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
void do() {}
boost::shared_future<void> f = boost::async(do);
std::vector<boost::shared_future<void>> fs;
fs.push_back(f);

但我不确定如何'移动'到#define BOOST_THREAD_USES_MOVE #include <boost/thread.hpp> #include <boost/thread/future.hpp> boost::unique_future<void> f = boost::async(boost::launch::any, do); 。我们需要更多的宏才能使其发挥作用吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

您可以使用share()成员函数明确地分享未来(不确定何时添加,但它肯定在Boost.Thread 1.56中):

boost::shared_future<void> f = boost::async(do).share();

共享期货是可复制的,因此您不需要使用移动语义。如果您决定在C ++ 03下使用移动语义,则必须use Boost.Move-aware containers,即用std::vector替换boost::container::vector

boost::unique_future<void> f = boost::async(do);
boost::container::vector<boost::unique_future<void>> fs;
fs.push_back(boost::move(f));