问题标签 [std-future]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 一定时间后强制终止方法
假设我有一个原型看起来像这样的函数,属于类container_class
:
该函数可能会或可能不会在某些输入上导致无限循环;无法判断哪些输入会导致成功,哪些会导致无限循环。该函数位于我没有来源且无法修改的库中(这是一个错误,将在几个月后的下一个版本中修复,但现在我需要一种解决方法),所以修改函数或类的解决方案将不起作用。
我尝试使用std::async
and隔离函数std::future
,并使用 while 循环不断检查线程的状态:
这段代码有很多问题。一是我不能强行终止std::future
对象(以及它所代表的线程)。
在最极端的情况下,如果我找不到任何其他解决方案,我可以将函数隔离在它自己的可执行文件中,运行它,然后检查它的状态并适当地终止它。但是,我宁愿不这样做。
我怎样才能做到这一点?有没有比我现在做的更好的方法?
c++11 - 唤醒延迟任务对象而不调用未来。得到()
当您在延迟任务对象上调用 std::future::wait_for 时会发生什么?
理想情况下,我想唤醒一个延迟任务,但不想在当前线程中处理任务。
c++ - C++ std::future 挂起超时
全部
我已经设置了一个测试项目来学习 std::future 及其与 std::async 的使用。这是一个简单的控制台应用程序,代码如下
我注意到 Visual Studion 2017 有一个奇怪的行为。如果我将项目属性->代码生成->运行时库设置为 /MTd 或 /MT 这个程序在退出时挂起并且调用堆栈显示
另一方面,如果我将项目属性-> 代码生成-> 运行时库设置为 /MD 或 /MDd,则该程序退出正常。
任何想法为什么会发生这种情况?感谢任何帮助,谢谢!
c++ - std::async(std::launch::deferred) + std::future::then 的行为
延迟未来(仅通过std::async
使用std::launch::deferred
标志调用实现)背后的想法是,只有当有人试图等待或提取未来的未来值或异常时才会调用回调。到那时回调不会执行。
如果我将 continuation 附加到 deferred future 会发生什么std::future::then
?延迟的未来会丢失(then
使未来无效),而是返回一个新的未来。
这种情况下,按照标准,应该怎么办?新的未来也是延迟的未来吗?它会只是僵局吗?最新文档中没有解决这个问题。
c++ - Make zmqpp::socket::connect a std::future
I want to bind an overloaded function to make an std::future
zmqpp::socket::connect
is created like that:
The first thing i did was that:
auto binded_connect = std::bind(&zmqpp::socket::connect, socket, endpoint);
But that was bad because zmqpp::socket::connect
is an overloaded function.
So I casted the connect function.
The thing is g++ don't like that.
He says a lot of things about tuple but i think the most important is :
So I don't really know what to do right now, I have no ideas where search to find answer.
I'm also sorry for bad english, not main language.
Thanks in advice.
c++ - 从模板 Callable 生成一个 Promise
我正在尝试从接受 Callable 类型的模板函数创建一个承诺。但我不知道该怎么做。我尝试使用std::invoke_result_t
,但这需要参数来知道结果类型,这是我在构造 promise 时不知道的。
有什么方法可以推断出返回类型?我想在泛型 lambda 的情况下这可能是不可能的,但是对非泛型 lambda 情况有什么作用吗?
c++ - 如何实例化一个类的公共成员并将其作为 std::promise 返回?
我希望实例化一个类的公共成员并将其作为承诺返回。
这就是我想要做的:
promise.x = y;
是不正确的语法。
赋值的正确语法是什么?
c++ - 将 std::async 与 std::launch::async 一起使用时的奇怪行为
我正试图绕过std::async
并std::futures
在 C++11 中引入。
我得到的上述程序的输出如下所示。
我的问题是因为我使用std::launch::async
执行应该立即使用另一个线程开始。输出告诉我它打印了该行Get the results
,然后才开始执行。(从上面的日志中可以明显看出)。也hog_cpu_ex
开始前hog_cpu
。有人可以解释为什么会发生这种情况。
c++ - 有没有办法以保证无等待的方式检查 std::future 状态是否准备就绪?
我知道我可以std::future
通过以下方式检查状态:
my_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready
但根据cppreference.com std::future::wait_for
在某些情况下可能会阻止:
由于调度或资源争用延迟,此函数可能会阻塞超过 timeout_duration。
0时仍然如此timeout_duration
吗?如果是这样,是否有另一种方法以保证无等待的方式查询状态?
c++11 - 由于移动承诺导致的分段错误
我已经通过了一个承诺作为对线程的引用。之后,promise 通过 std::move 移动到向量中。这会在执行软件时导致分段错误。
我认为在移动承诺后线程中的引用永远不会更新?如何将承诺传递给线程,以便之后可以移动它?请参阅我的问题的以下代码示例。