问题标签 [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.

0 投票
1 回答
249 浏览

c++ - 一定时间后强制终止方法

假设我有一个原型看起来像这样的函数,属于类container_class

该函数可能会或可能不会在某些输入上导致无限循环;无法判断哪些输入会导致成功,哪些会导致无限循环。该函数位于我没有来源且无法修改的库中(这是一个错误,将在几个月后的下一个版本中修复,但现在我需要一种解决方法),所以修改函数或类的解决方案将不起作用。

我尝试使用std::asyncand隔离函数std::future,并使用 while 循环不断检查线程的状态:

这段代码有很多问题。一是我不能强行终止std::future对象(以及它所代表的线程)。

在最极端的情况下,如果我找不到任何其他解决方案,我可以将函数隔离在它自己的可执行文件中,运行它,然后检查它的状态并适当地终止它。但是,我宁愿不这样做。

我怎样才能做到这一点?有没有比我现在做的更好的方法?

0 投票
1 回答
35 浏览

c++11 - 唤醒延迟任务对象而不调用未来。得到()

当您在延迟任务对象上调用 std::future::wait_for 时会发生什么?

理想情况下,我想唤醒一个延迟任务,但不想在当前线程中处理任务。

0 投票
0 回答
581 浏览

c++ - C++ std::future 挂起超时

全部

我已经设置了一个测试项目来学习 std::future 及其与 std::async 的使用。这是一个简单的控制台应用程序,代码如下

我注意到 Visual Studion 2017 有一个奇怪的行为。如果我将项目属性->代码生成->运行时库设置为 /MTd 或 /MT 这个程序在退出时挂起并且调用堆栈显示

另一方面,如果我将项目属性-> 代码生成-> 运行时库设置为 /MD 或 /MDd,则该程序退出正常。

任何想法为什么会发生这种情况?感谢任何帮助,谢谢!

0 投票
1 回答
712 浏览

c++ - std::async(std::launch::deferred) + std::future::then 的行为

延迟未来(仅通过std::async使用std::launch::deferred标志调用实现)背后的想法是,只有当有人试图等待或提取未来的未来值或异常时才会调用回调。到那时回调不会执行。

如果我将 continuation 附加到 deferred future 会发生什么std::future::then?延迟的未来会丢失(then使未来无效),而是返回一个新的未来。

这种情况下,按照标准,应该怎么办?新的未来也是延迟的未来吗?它会只是僵局吗?最新文档中没有解决这个问题。

0 投票
1 回答
170 浏览

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.

0 投票
1 回答
241 浏览

c++ - 从模板 Callable 生成一个 Promise

我正在尝试从接受 Callable 类型的模板函数创建一个承诺。但我不知道该怎么做。我尝试使用std::invoke_result_t,但这需要参数来知道结果类型,这是我在构造 promise 时不知道的。

有什么方法可以推断出返回类型?我想在泛型 lambda 的情况下这可能是不可能的,但是对非泛型 lambda 情况有什么作用吗?

0 投票
2 回答
192 浏览

c++ - 如何实例化一个类的公共成员并将其作为 std::promise 返回?

我希望实例化一个类的公共成员并将其作为承诺返回。
这就是我想要做的:

promise.x = y;是不正确的语法。
赋值的正确语法是什么?

0 投票
1 回答
47 浏览

c++ - 将 std::async 与 std::launch::async 一起使用时的奇怪行为

我正试图绕过std::asyncstd::futures在 C++11 中引入。

我得到的上述程序的输出如下所示。

我的问题是因为我使用std::launch::async执行应该立即使用另一个线程开始。输出告诉我它打印了该行Get the results,然后才开始执行。(从上面的日志中可以明显看出)。也hog_cpu_ex开始前hog_cpu。有人可以解释为什么会发生这种情况。

0 投票
3 回答
3120 浏览

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吗?如果是这样,是否有另一种方法以保证无等待的方式查询状态?

0 投票
2 回答
552 浏览

c++11 - 由于移动承诺导致的分段错误

我已经通过了一个承诺作为对线程的引用。之后,promise 通过 std::move 移动到向量中。这会在执行软件时导致分段错误。

我认为在移动承诺后线程中的引用永远不会更新?如何将承诺传递给线程,以便之后可以移动它?请参阅我的问题的以下代码示例。