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

c++ - std::async 可以调用 std::function 对象吗?

是否可以使用 std::async 调用使用 std::bind 创建的函数对象。以下代码无法编译:

错误是:

没有匹配函数调用'async':候选模板被忽略:替换失败[with Fp = std:: _1::function &, Args = <>]:'std:: _1::__invoke_of中没有名为'type'的类型, >

是不能将 async 与 std::function 对象一起使用,还是我做错了什么?

(这是使用 Xcode 5 和 Apple LLVM 5.0 编译器编译的)

0 投票
1 回答
153 浏览

c++11 - 使用新的 c++11 std::async 加速 std:.vector 填充

我正在使用 vc++ 2013 速成版。我正在研究 c++11 的一些新特性,比如 std::async 和 std::future。

我有一个类 Foo,带有一个std::shared_ptr<std::vector<unsigned int> >. 在 Foo ctor 中,我使用 std::make_shared 在堆中分配向量;

来自 Foo.h

来自 Foo.cpp

问题是我在调用 std::async(std::launch::async, &Foo::fooFunction, this).get(); 之间看不到任何好处 和 fooFunction();

为什么??任何帮助将不胜感激。此致

0 投票
5 回答
33996 浏览

c++ - 我可以在不等待未来限制的情况下使用 std::async 吗?

高级
我想在异步模式下调用一些没有返回值的函数,而无需等待它们完成。如果我使用 std::async 未来对象在任务结束之前不会破坏,这会使调用在我的情况下不同步。

例子

我的问题是

  1. 有没有办法克服这个限制?
  2. 如果 (1) 不是,我是否应该实现一个线程来获取那些“僵尸”期货并等待它们?
  3. (1) 和 (2) 是不是,还有其他选择,然后只构建我自己的线程池吗?

注意:
我宁愿不使用线程+分离选项(由@galop1n 建议),因为创建新线程有我希望避免的开销。使用 std::async 时(至少在 MSVC 上)正在使用内部线程池。

谢谢。

0 投票
1 回答
937 浏览

c++ - 如何异步执行从 unique_ptr 到对象的方法?

我创建了一个指向这样的对象的唯一指针:

那里有一个方法,我需要在并行线程中执行。我不想等待它完成。它将运行一个 for 循环并等待某些东西并在自己的时间内完成。

我试着这样称呼它:

也像这样:

两个调用都成功并执行方法中的任何内容。但我没有得到任何并行性。无论我从哪里调用它,执行都会等待,并且在方法完成之前不会继续执行。在自己的线程中运行此方法而不等待它的好方法是什么?我应该使用一些特殊的编译器标志来实现这一点吗?我在 Ubuntu 上使用 GCC 4.8.1。

0 投票
1 回答
876 浏览

c++ - std::async 的奇怪行为

考虑以下示例代码:

GCC 4.6.3 编译这个没有任何抱怨。但是,这在运行时失败:

然而,GCC 4.8.2 拒绝编译该文件:

这似乎是一个 libstdc++ 问题。

所以我的问题是: 1 - GCC 是否应该拒绝此代码,或者标准中是否有我不知道的内容。2 - 断言应该失败吗?预期的行为是采用相同引用的异步函数应该引用相同的对象,但似乎副本是异步任务的本地副本。

我尝试使用 clang 进行编译,但它与 4.8.2 有相同的编译错误问题(因为它共享相同的 libstdc++),并且它无法编译 4.6.3 库头文件。

0 投票
1 回答
1194 浏览

c++ - C++ std::async 调用类成员方法看不到变量变化

我对 std::async 正在启动的进程有一些问题。

在我的谷歌测试测试中:

我对 std::async 的理解是它应该安排在调用 async 后不久运行,如果线程没有完成,执行的主线程将在 get() 调用处阻塞。对 get() 的调用将返回 process() 的返回值。

如果未启用 testClass,则 process() 设置为不运行,因此我在测试中启用它。

我希望看到:

我看到的是:

为什么 std::async 触发的进程没有看到主进程在进行异步调用之前设置的 enabledFlag 的值?

注意: enabledFlag 应该从外部进程设置,而不是通常从循环内部设置,因此这种构造

** 更新 ** 根据我的评论,我在调用 async() 之后通过在测试中添加以下行来修复它:

0 投票
4 回答
59105 浏览

c++ - 何时使用 std::async 与 std::threads?

任何人都可以给出关于何时使用它们的高级直觉吗?

参考:

0 投票
2 回答
2711 浏览

c++ - 将 std::async 与模板函数一起使用

我怎样才能,或者,我可以将模板函数传递给异步?

这是代码:

以下是错误消息:

0 投票
1 回答
611 浏览

c++ - 如何将变量传递给 std::async?

我怎样才能像这样将向量传递给异步调用?

0 投票
2 回答
2001 浏览

c++ - 带有重载函数的 std::async

可能重复:

std::bind 重载决议

考虑以下 C++ 示例

这给出了 'std::async' :不能推断模板参数,因为函数参数不明确。我该如何解决这种歧义?