草庐IT

future_fib

全部标签

c++ - std::futures 和异常

给定以下源代码#include#include#include#include#includeintmain(){autotask=std::async(std::launch::async,[]{std::this_thread::sleep_for(std::chrono::milliseconds(1000));throwstd::runtime_error("error");});try{while(task.wait_for(std::chrono::seconds(0))!=std::future_status::ready){std::cout我希望程序会以Valid:0

c++ - 移除 std::future 和 std::promise 的无效特化

关于描述删除std::future和std::promise的无效特化的论文P0241R0.这可能是一个愚蠢的问题,但建议的解决方案是完全删除void特化,但是当人们想要实例化一个std::future时,他们期望做什么?目的? 最佳答案 如引用文献中所述,这是可能的ifvoidwerearegulartype.voidget_value(){voidx;returnx;}这是它在其他一些语言中的工作方式,因此并非没有先例。在其他语言中,它被称为“单位”类型,因为它只有一个可能的值。(其他语言也有“null”类型,它没有可能的值,所

c++ - 寻找合适的工具来编写 future 风格的 UI 项目

我一直受到动态的、future主义风格的用户界面的启发。我能描述的最好的是图形界面,例如最新的钢铁侠电影。虽然我不会构建一个完整的应用程序,但我想制作一些我计划进行交互的动画片段。也许有一天把它们放在一起做更大的东西。不可否认,我将来会用于音频处理,但无论如何,这不是重点,因为我不确定这是动画/图形。我知道可以在Adob​​eAfterEffects中制作此类动画。我只是很难思考要进行的过程(艺术性和可编程性)。在我自己研究这个的过程中,我获得了OGRE3D和Blender的基本经验。我已经在OGRE上导入并编译了网格,已经能够做一些基本的事情,比如围绕它移动网格。我开始认为我可能以错

c++ - future 可以安全地传递给分离的线程吗?

将std::future传递给std::thread的分离实例是安全操作吗?我知道在下面,std::future在与std::promise共享的shared_ptr中有状态。这是一个例子。intmain(){std::promisep;std::thread([f=p.get_future()](){if(f.wait_for(std::chrono::seconds(2))==std::future_status::ready){return;}std::terminate();}).detach();//waitforsomeoperationp.set_value();}在上面

c++ - future 、 promise 和异常(exception)

std::promisep1;autof=p1.get_future();{std::promisep2(std::move(pr));}boolvalid=f.valid();//truef.wait();//doesnotthrow,orfail,butreturnsimmediatelyf.get();//throwsanexception有什么方法可以在调用get之前检查future是否会抛出异常?我希望valid会检查...我不太确定如何让valid返回false。在不设置值的情况下销毁promise不会这样做。 最佳答案

c++ - 如何在获得 future 值(value)后重用 boost::promise 对象?

voidsss(boost::promise&res){res.set_value("hi");}voidyyy(boost::promise&res){res.set_value("hello");}intmain(){boost::threadth;boost::promisea;th=boost::thread(sss,boost::ref(a));th.join();std::cout我收到promise已经满足的错误。如何复用同一个Promise对象? 最佳答案 用未使用的promise替换它:a=boost::promi

c++ - 谁负责 futures 和 promises 的共享状态

谁拥有future和promise中的共享状态?特别是谁负责构建和删除这些类中的共享状态?或者共享状态应该被引用计数?我无法通过阅读有关cppreference的文档来获得答案。我的想法是,最简单的做法是拥有std::promise类负责创建共享状态,然后将其交给std::future这是从std::promise中获取的在未来被摧毁时删除。但是这种方法可能会导致悬空的promise对象。所以我不确定两者之间应该如何共享状态。例如,下面的代码是否会产生未定义的行为(因为共享状态可能会在future被销毁时被销毁)?autoprom=std::promise{};{autofut=pro

c++ - 理解 std::future::then 的延续

谁能用C++中的示例解释async([](){x();y();})和async([]()之间的区别{x();}).then([](){y();})?我的理解是,在后一种情况下,x、y中的每一个都可能会立即在不同的线程中启动,并且只会在get时阻塞(在它们各自的线程中)()在未来作为输入传递时被调用。 最佳答案 ...whatisthedifferencebetweenasync([](){x();y();})andasync([](){x();}).then([](){y();})?真的不多-那么为什么要有呢?一言以蔽之可组合性。它

c++ - 在早期标准中使用为 future 标准批准的 C++ 技术规范是否安全?

FilesystemTechnicalSpecification(TS)最近已合并到C++17标准中。同样的TS也可用于C++14,但在这种情况下,它在技术上只是“实验性的”。然而,它已被批准用于C++17这一事实让我认为它已经足够成熟并且可以安全使用。在处理将来很可能会升级到C++17的C++14项目时,假设我使用的编译器在两个版本上都支持它,您是否建议不要使用“实验性”TS,考虑到它会正式成为下一个标准的一部分吗?我的问题当然扩展到任何已在未来C++版本中接受并且可用于早期标准的TS。 最佳答案 真正的问题是是否有人实现了它,而

c++ - 为什么 future::wait() 不阻塞

#include#include#include#includeintmain(){autopms=std::promise();autoftr=pms.get_future();std::thread([&](){pms.set_value("helloworld");});ftr.wait();std::cout根据thislink,std::future::wait阻塞直到结果可用。但是,上面的代码不能打印任何东西。显然主线程在pms.set_value线程完成之前就已经完成了。为什么ftr.wait()不阻塞? 最佳答案 问