问题标签 [stdasync]

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 回答
4798 浏览

c++ - 主线程等待 std::async 完成

std::async用来创建一个线程,我希望这个新线程应该单独执行,主线程不应该等待它。但是在这里,当我调用 std::async 时,会创建一个新线程,但主线程正在等待fun(). 我希望主线程在不等待fun()完成的情况下并行执行。我该怎么做?

我得到输出:

0 投票
1 回答
1374 浏览

c++ - 带有 gcc 7.2 的 std::async 需要 pthread 链接选项

以下代码需要 pthread 链接选项才能编译,我不明白为什么。你有什么主意吗?

我正在使用 gcc 7.2.0

编译

提供以下错误

使用时

没有问题。

这是正常的吗?我错过了什么吗?我的代码在某处没有 pthread_create

0 投票
2 回答
943 浏览

c++ - std::async 的参数的生命周期是多少?

似乎通过std::async共享未来的生命周期执行的函数的参数:

结果是:

看起来底层实现(MSVS 2015 U3)在地址处创建了参数的最终版本138054922824,但在未来被销毁之前不会销毁它。

感觉这违反了 RAII 承诺,因为函数实现可能会依赖于退出时调用的参数的析构函数。

这是一个错误还是传递给的参数的确切生命周期std::async是未知的?标准对此有何评论?

0 投票
1 回答
35 浏览

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

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

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

0 投票
1 回答
1661 浏览

c++ - C++ - 使用 std::async 时显示进度条

所以我正在研究光线追踪器,为了减少渲染时间,我使用 std::async 独立进行像素计算。我使用了这个教程,一切都很好,实际上我能够节省大约 70% 的渲染时间。

不过,有些场景需要一段时间才能渲染,我想显示某种进度条。由于我是异步基础设施的新手,我不太确定如何做到这一点。我想要某种机制来仅打印“主”线程的进度。

这里是渲染循环——注意进度条的注释行——显然不应该去那里:

更新: 所以我做了一些答案的建议 - 这里是结果 - 为未来的读者。当异步渲染时,我对几个场景的基准是 15 秒(我故意加快了速度)。当我使用互斥锁时,时间减慢到 26 秒。(在单线程上仍然优于 1.32)。我还积极等待其中一个工作线程,并每隔 100 英里左右更新一次进度 - 渲染时间为 16 秒。所以我对这个结果非常满意,因为印刷几乎没有减慢这个过程。

谢谢, 阿隆

0 投票
7 回答
521 浏览

c++ - 如果不这样做,函数如何在新线程上“好像”运行?

根据 C++ 标准的 [futures.async]/3 项目符号 1,当使用启动策略f传递函数时,将“就像在新的执行线程中一样”运行。std::asyncstd::launch::asyncf

鉴于它f可以做任何事情,包括无限循环和永远阻塞,一个实现如何提供在f自己的线程上运行而不实际在自己的线程上运行的行为?也就是说,实现如何利用标准提供的“好像”摆动空间?

0 投票
1 回答
309 浏览

c++ - 如何从 std::async 任务返回 std::tuple

如何将成员函数作为 std::async 任务启动,它返回一个 std::tuple。

示例代码:

在此示例中,没有成员变量,代码可以正常工作。上面的代码为以下几行引发编译错误:

错误:没有重载函数 'std::async' 的实例与参数列表匹配。

错误:没有重载函数 'std::get' 的实例与参数列表匹配。

0 投票
2 回答
352 浏览

c++ - 如何有效地使用 std::async 对指针数组执行操作

我对现代 C++ 库非常陌生,并试图学习如何使用 std::async 对大指针数组执行一些操作。我编写的示例代码在启动异步任务时崩溃。

示例代码:

谁能帮我确定它为什么会崩溃?有没有更好的方法将并行性应用于大指针数组上的操作?

0 投票
0 回答
35 浏览

c++ - 在 C++ 中的同步函数中调用 std::async 函数

考虑以下示例:

1.所有函数都是异步调用的

一切正常,输出如下

2.第一个函数被同步调用,第二个被异步调用

如果我用普通函数调用替换 main 中的异步调用,如下所示:

然后只有 middleFunc() & threadFunc() 运行,执行永远不会到达 main() 的 while 循环,输出为


在这两种情况下,threadFunc() 都使用 std::async 运行。那么,一旦 middleFunc() 打印出 'humble' ,它不应该返回 main() 吗?

0 投票
2 回答
768 浏览

c++ - 在异步 60 秒延迟后在 C++ 中执行函数?

我读过这可以使用std::this_thread::sleep_forstd::async来实现,但这对我不起作用。

这是要调用的函数:

这是从另一个函数调用的。下面的代码中有两个使用失败的例子:

最初,bool Log::r​​efresh_data()void Log::r​​efresh_data()std::async似乎不喜欢 void 返回...