问题标签 [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.
c++ - 主线程等待 std::async 完成
我std::async
用来创建一个线程,我希望这个新线程应该单独执行,主线程不应该等待它。但是在这里,当我调用 std::async 时,会创建一个新线程,但主线程正在等待fun()
. 我希望主线程在不等待fun()
完成的情况下并行执行。我该怎么做?
我得到输出:
c++ - 带有 gcc 7.2 的 std::async 需要 pthread 链接选项
以下代码需要 pthread 链接选项才能编译,我不明白为什么。你有什么主意吗?
我正在使用 gcc 7.2.0
编译
提供以下错误
使用时
没有问题。
这是正常的吗?我错过了什么吗?我的代码在某处没有 pthread_create
c++ - std::async 的参数的生命周期是多少?
似乎通过std::async
共享未来的生命周期执行的函数的参数:
结果是:
看起来底层实现(MSVS 2015 U3)在地址处创建了参数的最终版本138054922824
,但在未来被销毁之前不会销毁它。
感觉这违反了 RAII 承诺,因为函数实现可能会依赖于退出时调用的参数的析构函数。
这是一个错误还是传递给的参数的确切生命周期std::async
是未知的?标准对此有何评论?
c++11 - 唤醒延迟任务对象而不调用未来。得到()
当您在延迟任务对象上调用 std::future::wait_for 时会发生什么?
理想情况下,我想唤醒一个延迟任务,但不想在当前线程中处理任务。
c++ - C++ - 使用 std::async 时显示进度条
所以我正在研究光线追踪器,为了减少渲染时间,我使用 std::async 独立进行像素计算。我使用了这个教程,一切都很好,实际上我能够节省大约 70% 的渲染时间。
不过,有些场景需要一段时间才能渲染,我想显示某种进度条。由于我是异步基础设施的新手,我不太确定如何做到这一点。我想要某种机制来仅打印“主”线程的进度。
这里是渲染循环——注意进度条的注释行——显然不应该去那里:
更新: 所以我做了一些答案的建议 - 这里是结果 - 为未来的读者。当异步渲染时,我对几个场景的基准是 15 秒(我故意加快了速度)。当我使用互斥锁时,时间减慢到 26 秒。(在单线程上仍然优于 1.32)。我还积极等待其中一个工作线程,并每隔 100 英里左右更新一次进度 - 渲染时间为 16 秒。所以我对这个结果非常满意,因为印刷几乎没有减慢这个过程。
谢谢, 阿隆
c++ - 如果不这样做,函数如何在新线程上“好像”运行?
根据 C++ 标准的 [futures.async]/3 项目符号 1,当使用启动策略f
传递函数时,将“就像在新的执行线程中一样”运行。std::async
std::launch::async
f
鉴于它f
可以做任何事情,包括无限循环和永远阻塞,一个实现如何提供在f
自己的线程上运行而不实际在自己的线程上运行的行为?也就是说,实现如何利用标准提供的“好像”摆动空间?
c++ - 如何从 std::async 任务返回 std::tuple
如何将成员函数作为 std::async 任务启动,它返回一个 std::tuple。
示例代码:
在此示例中,没有成员变量,代码可以正常工作。上面的代码为以下几行引发编译错误:
错误:没有重载函数 'std::async' 的实例与参数列表匹配。
错误:没有重载函数 'std::get' 的实例与参数列表匹配。
c++ - 如何有效地使用 std::async 对指针数组执行操作
我对现代 C++ 库非常陌生,并试图学习如何使用 std::async 对大指针数组执行一些操作。我编写的示例代码在启动异步任务时崩溃。
示例代码:
谁能帮我确定它为什么会崩溃?有没有更好的方法将并行性应用于大指针数组上的操作?
c++ - 在 C++ 中的同步函数中调用 std::async 函数
考虑以下示例:
1.所有函数都是异步调用的
一切正常,输出如下
2.第一个函数被同步调用,第二个被异步调用
如果我用普通函数调用替换 main 中的异步调用,如下所示:
然后只有 middleFunc() & threadFunc() 运行,执行永远不会到达 main() 的 while 循环,输出为
在这两种情况下,threadFunc() 都使用 std::async 运行。那么,一旦 middleFunc() 打印出 'humble' ,它不应该返回 main() 吗?
c++ - 在异步 60 秒延迟后在 C++ 中执行函数?
我读过这可以使用std::this_thread::sleep_for和std::async来实现,但这对我不起作用。
这是要调用的函数:
这是从另一个函数调用的。下面的代码中有两个使用失败的例子:
最初,bool Log::refresh_data()是void Log::refresh_data()但std::async似乎不喜欢 void 返回...