草庐IT

future-swap

全部标签

c++ - std::future 如何影响关联的 std::packaged_task 的生命周期?

我有一个std::packaged_task包含一个通过复制捕获变量的lambda。当这个std::packaged_task被删除时,我希望lambda中的变量被破坏,但我注意到如果我得到相关的std::future这个std::packaged_task,future对象延长了lambda内部变量的生命周期。例如:#include#includeclassDummy{public:Dummy(){std::cout*p_task;{DummyScopedDummy;p_task=newstd::packaged_task([ScopedDummy](){std::coutfutur

c++ - 如何在列表中存储自删除 future

我有一些任务需要异步执行,服务器无法在仍有任务运行时关闭。所以我试图将std::async返回的future存储在一个列表中,但我也不想得到一个无限增长的列表。所以我想在它们完成时删除future。这大致是我正在尝试做的事情://thisisamemberoftheserverclassstd::list>pending;std::list>::iteratoriter=???;pending.push_back(std::async(std::launch::async,[iter](){doSomething();pending.remove(iter);});这里,iter需要指

c++ - Boost 无法从演示中找到 future::then

那时我想尝试boostfuture,我安装了boost1.55并包含在make文件中,我想尝试官方演示#defineBOOST_THREAD_PROVIDES_FUTURE#includeusingnamespaceboost;intmain(){futuref1=async([](){return123;});futuref2=f1.then([](futuref){returnf.get();});//here.get()won'tblock});}但是编译的时候总是报错error:‘classboost::future’hasnomembernamed‘then’当我用f2注释行

c++ - 使用 std::swap 而不是使用 '=' 运算符进行赋值

我正在查看一些C++源代码fromalibrary与我正在从事的宠物项目有关,遇到了一些我不明白的事情。在我期望指针取消引用然后赋值的地方,库作者在函数末尾附近使用std::swap()来写入结果:std::swap(*out,result);我希望看到这样的东西:*out=result;请注意,result是size_t的typedef,out是指向同一类型的指针。当谈到“系统编程”时,我的背景是C和C#,但对C++的了解并不多。这种“分配”有什么特别的原因吗? 最佳答案 当值类型更有趣时,例如std::vector,例如,std

c++ - c++ 11中的 future vector

您好,我使用lambda函数在C++11中创建了一个futurevector。vectorv={0,1.1,2.2,3.3,4.4,5.5};autoK=[=](doublez){doubley=0;for(constautox:v)y+=x*x*z;returny;};vector>VF;for(doublei:{1,2,3,4,5,6,7,8,9})VF.push_back(async(K,i));它运行成功,但是当我尝试通过for_each调用检索值时,我遇到了一个我不理解的编译错误。for_each(VF.begin(),VF.end(),[](futurex){cout这些值

c++ - 调用 get() 后 std::future 仍然有效(抛出异常)

根据cppreference,在调用std::future::get之后:valid()isfalseafteracalltothismethod.此外,来自cplusplus.com:Oncethesharedstateisready,thefunctionunblocksandreturns(orthrows)releasingitssharedstate.Thismakesthefutureobjectnolongervalid:thismemberfunctionshallbecalledonceatmostforeveryfuturesharedstate.在异常安全下:Th

c++ - 当编写自己的 swap() 函数/方法有性能优势时

假设我有这样的类(class):structA{std::stringa;std::stringb;std::stringc;std::stringd;};如果我使用std::swap,它可能会做这样的事情://pseudo-code:voidstd::swap(A&a,A&b){Atmp=std::move(a);a=std::move(b);b=std::move(tmp);}它将使用默认的c-tor构造“空”对象tmp-通常是廉价操作。然后它有希望移动3次,除非在疯狂的情况下移动衰减到复制。但是如果我自己交换:voidswap(A&a,A&b){std::swap(a.a,b.a

c++ - 将 future 存储在列表中

我想将使用异步生成的多个线程的future存储在一个列表中,以便稍后检索它们的结果。futuref=async(doLater,parameter);list>l;l.push_back(f);但是编译器打印出如下错误信息/usr/include/c++/4.7/bits/stl_list.h:115:71:error:useofdeletedfunction'std::future::future(conststd::future&)[with_Res=int;std::future=std::future]'我是做错了什么还是列表不应该存储future?如果不是,应该使用什么?

c++ - boost::asio 与 boost::unique_future

根据http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/overview/cpp2011/futures.html,我们可以将boost::asio与std::future一起使用。但是我找不到任何关于使用boost::unique_future的信息,它有更多的功能,比如then()。我该如何使用? 最佳答案 Boost.Asio仅提供一流的异步操作支持,以返回C++11std::future或stackfulcoroutines中的实际值.尽管如此,requireme

c++ - 将 future 与 boost::asio 结合使用

有没有人知道使用futuresfromtheBoostthreadlibrary的例子?与BoostASIO?我有一个现有的异步库,它使用回调函数,我想为其提供一个更友好的同步接口(interface)。 最佳答案 如果不了解与现有异步库的交互,很难提供简洁的解决方案。尽管如此,这answer使用Boost.Future和Boost.Asio来实现主动对象模式。当creatingafuture,考虑检查现有的异步库以确定哪种方法更合适:boost::packaged_task提供了一个可以创建future的仿函数。这个仿函数可以在B