问题标签 [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 投票
3 回答
867 浏览

c++ - 为什么 std::future 从 std::packaged_task 和 std::async 返回不同?

我知道了future返回 from的原因std::async有一些特殊的共享状态,通过这种共享状态wait on returned future发生在未来的析构函数中。但是当我们使用 时std::pakaged_task,它的未来不会表现出相同的行为。要完成打包任务,您必须显式调用get()来自 的future对象packaged_task

现在我的问题是:

  1. std::async未来(thinking vs )的内部实现可能是什么std::packaged_task
  2. 为什么相同的行为不适用于future返回 from std::packaged_task?或者,换句话说,如何停止相同的行为std::packaged_task future

要查看上下文,请参阅以下代码:

它不等待完成countdown任务。但是,如果我取消评论// int value = ret.get();,它将完成countdown并且很明显,因为我们实际上是在阻止返回的未来。

如果我使用在另一个线程上std::async执行任务countdown,无论我是否get()返回的future对象上使用,它都会完成任务。

0 投票
1 回答
197 浏览

c++ - 为什么我在异步中遇到错误,C++ 中的未来

我第一次使用 std::async 和 std::future 并收到错误,有人可以帮我纠正它吗?

错误:

编码:

0 投票
1 回答
858 浏览

macos - 错误:命名空间“std”中没有名为“async”的成员

我知道这std::async是 C++11 的事情,但我很确定我的编译器支持 C++11。

如果我使用

还有 g++ --version 显示

我经历了以下,

还,

  • 操作系统:macOS Catalina
  • 这段代码是一个更大的项目(TigerVNC 的包装器)的一部分,所以有一个 makefile,但由于auto没有任何问题,我认为 C++11 不是问题,因此传入-std=c++11CXXFLAGS无济于事CPPFLAGS
0 投票
0 回答
103 浏览

c++ - 优雅地退出包含 std::async C++ 的程序

我有主线程,它使用std:async.

我想要的是当exitMainloop值被设置时,即主循环退出,std::async调用创建的工作线程也应该优雅地退出。

我读到这篇文章说你不能取消/停止 C++ 中的线程。但我相信这一定是一个相当普遍的用例。所以,一般来说,这种情况是如何处理的。如何优雅地终止程序?

0 投票
1 回答
116 浏览

c++ - 如何在以共享资源为参数的 for 循环中使用 std 未来和异步线程?

我在线程练习项目中遇到了一个实现问题。我知道我想要实现什么,但我不知道如何实现。我是 std::future 和 std::async 主题的新手,所以我什至不确定是否可以按照我想象的方式实现。

我有一个具有此功能的NuclearPP 类(它应该是正确的)。

我还有一个 NPPCore 类,它有一个产生能量的函数:

我的问题是:如何为每个 core_it->GenerateEnergy(energy_required_per_core, power_generated) 启动一个线程。

非常感谢转发。如果您需要更多信息,请随时询问。

兄弟,史蒂夫

0 投票
0 回答
184 浏览

c++ - 为什么在从 std::future 访问值时会引发“读取访问冲突”异常?

编辑:我的问题与建议的问题不同,因为我无法轮询 100 个 future.get() 并等待在 main() 线程中执行剩余的程序。我希望线程在执行完线程后返回值,然后调用函数应该运行。

根据这个问题

在 C++ 中,future 等待结果并暂停下一行代码

我有以下代码,我正在创建大约 100 个异步线程,然后检索返回变量;

我在该行收到“读取访问冲突”的运行时异常opMatArr.emplace_back(future.get());

当我检查processingThread变量时,它将所有future值显示为待处理。那么,如果问题中的上述引用是正确的,我的代码不应该等到它获得所有future值吗?否则,此答案提供了以下解决方案,以等待您从中获得future价值future.get()

但这对我来说是不可能的,因为那时我将不得不轮询所有 100 个future.get(),并且它会有一个开销,这将破坏创建线程的目的。

我有两个问题;1> 为什么会出现运行时异常?2> 如何等到所有 100 的future.get()返回值?

编辑:我正在提供我的流程功能。

0 投票
1 回答
65 浏览

c++ - 当 wait_for() 状态准备好并且 wait() 返回时 std::future get() 阻塞

我希望下面的代码每次都能通过所有断言并成功完成。目前似乎std::future.get()每次都在两个分支中阻塞。尽管wait_for()状态显示为readywait()立即返回,但它永远阻塞。gcc 7.4.0 和 clang 6.0.0 的结果相同。

0 投票
1 回答
204 浏览

c++ - C++ 将 std::future 形式的 std::async 存储在向量中并等待所有人

我想与 std::async 并行执行几项任务,然后等到所有期货都完成。

但是在执行程序时我得到一个std::future_error抛出:

我想知道为什么。我不应该能够存储未来的对象吗?

0 投票
0 回答
87 浏览

c++ - 您如何在 C++ 中正确地等待/等待异步?

抱歉,如果问题不清楚。我会试着在这里解释一下。

我正在做一个测试项目,其中两个节点将相互通信特殊数据包。如:节点 A 将向节点 B 发送一个数据包,当节点 B 生成它的数据包时,节点 B 也应该处理来自节点 A 的信息。节点 A 应该为节点 B 准备另一个数据包。

我一直在阅读 std::future 但我不确定我是否理解它是如何工作的。我的问题是关于大部分注释掉的代码。这只是伪代码,因此我可以尝试更好地了解 C++ 中的异步函数。我通常用 C#/Java 编程,其中异步函数相当简单(ish)。我希望上述解释我正在尝试做的事情。

下面的代码可能还有其他一些错误。这只是一个快速而肮脏的尝试,试图传达我的要求。

我的问题是:

  1. 假设节点 B 是这个理论应用程序的一个单独实例,在不同的设备上运行,那么检查节点 B 是否准备就绪的最佳方法是什么?如果这有什么不同,这是用 Linux C++ 编写的。

  2. 这甚至是在 C++ 中执行 Tasks/Await/Await Async 的正确方法吗?如果这是不正确的,那么正确的方法是什么?

提前致谢。

0 投票
0 回答
47 浏览

c++ - C++11 获取从线程更新的 std::future 数据

我有一个在单独的线程上运行的 udp 套接字。我只需要定期获取某些数据,例如:

}

f1 和 f2 只能定期更新。如果我在runThread中有一个接收循环,当它们第二次更新时,它会抛出一个“承诺已经满足”错误。是否可以将 mySocket 保持在接收循环中,但仅在需要时才更新未来的数据?