问题标签 [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 回答
1059 浏览

c++ - 给定一个期货容器,如何以非阻塞方式执行所有获取?

因此,我正在尝试创建一种通用方式来创建期货容器,并以非阻塞方式执行所有 future.get()'。

我预计任务的完成时间应该在几百毫秒之间,通常最多 2 分钟。然而,有些可能根本无法完成。在典型的运行中将至少执行 10,000 个任务。

我希望返回最快的任务结果,而不会被期货容器中其他更长时间运行的任务所阻碍。

到目前为止,这是我使用虚拟睡眠时间来模拟任务完成延迟的内容(设计在很大程度上要归功于这里发表的好帖子,例如thisthis):

所以,我的问题是:

  • 我使用的方法有什么问题吗?
  • get_async_all() 是否有比我正在使用的更好/更优雅的方法?或者我正在做的任何其他事情,就此而言。

感谢任何人花时间查看代码,并给我任何建设性的批评或反馈。

0 投票
1 回答
13186 浏览

c++ - 哪些 std::async 实现使用线程池?

std::async使用而不是手动创建对象的优点之一std::thread应该是std::async可以在幕后使用线程池来避免超额订阅问题。但是哪些实现可以做到这一点?我的理解是微软的实现可以,但是这些其他的async实现呢?

  • Gnu 的 libstdc++
  • LLVM 的 libc++
  • Just Software的图书馆
  • 提升(对于boost::thread::async,不是std::async

感谢您提供的任何信息。

0 投票
1 回答
453 浏览

c++ - std::thread 有多标准?

我注意到,在许多已针对 C++11 更新的经典 C++ 参考源中,例如cplusplus.comJosuttis 标准库参考书,似乎根本没有涵盖/没有任何文档C++11 并发标准库功能,例如std::threadstd::atomicstd::async.

这些并发特性是否比标准库的其他部分“不那么标准”?还是因为其他原因缺少文档?

0 投票
1 回答
989 浏览

c++ - C++异步线程在调用线程完成时终止

我正在尝试使用多线程方法进行递归目录列表。以下代码在将异步调用替换为普通的单线程递归函数调用时工作正常,但是当使用异步实现时,当从 main 进行的初始异步调用完成时,递归启动的线程似乎都终止了,因为输出显示了对该函数的多次调用开始,但输出所有文件的唯一目录是初始目录,“完成”只输出一次,尽管“开始”输出了几次,并且也输出了一些其他目录的文件。我怀疑我错过了一些基本的东西。谁能解释这段代码有什么问题?

顺便说一句,有些人可能会问我为什么不使用 wrecursive_directory_iterator。显然 wrecursive_directory_iterator 将抛出异常并停止,如果您没有读取权限,则无法继续,因此此方法应允许您在这种情况下继续。

0 投票
5 回答
74404 浏览

c++ - 为什么我应该使用 std::async?

我试图深入探索新 C++11 标准的所有选项,同时使用 std::async 并阅读它的定义,我注意到两件事,至少在 linux 下使用 gcc 4.8.1 :

  • 它被称为async,但它有一个真正的“顺序行为”,基本上在你调用与你的异步函数foo关联的未来的行中,程序阻塞直到foo的执行完成。
  • 它依赖于与其他库完全相同的外部库,以及更好的非阻塞解决方案,这意味着pthread,如果你想使用std::async,你需要 pthread。

在这一点上,我很自然地问为什么选择 std::async 而不是一组简单的仿函数?这是一个根本无法扩展的解决方案,您调用的未来越多,您的程序响应性就越差。

我错过了什么吗?您能否展示一个允许以异步、非阻塞方式执行的示例?

0 投票
2 回答
747 浏览

c++ - 多个 std::threads 和主程序执行问题

几天来,我一直在努力想出一种机制来启动几个计时器,而不是让它为主程序的执行计时。.join().detach(),wait_until()等的组合

我拥有的是一个向量,std::thread我想:

  • 执行第一个位置
  • 等待它完成
  • 执行下一个位置
  • 等待它完成

与此同时,我的应用程序的其余部分正在运行,用户点击事物等。我想出的一切似乎都是:

  • 在计时器运行时阻止主程序运行

或者

  • 与主线程分离,但随后计时器同时运行,在前一个完成后我想要一个。

我什至发布了:C++11 std::threads 并等待线程完成,但我似乎无法理解任何解决方案。

我应该使用std::launch::async吗?

编辑:我不确定为什么这对我来说很难掌握。我的意思是电子游戏一直都在这样做。以小塔为例。您为楼层存货,从您开始存货到该项目存货时,这些操作中的每一个都有延迟,它会触发一个弹出的 HUD 并显示“楼层已存货”。同时整个游戏保持运行,让你做其他事情。我一定很密集,因为我无法弄清楚这一点。

0 投票
4 回答
35198 浏览

c++ - packaged_task 和 async 有什么区别

在使用 C++11 的线程模型时,我注意到

似乎做同样的事情。我知道如果我使用 运行可能会有很大的不同std::asyncstd::launch::deferred但在这种情况下是否存在差异?

这两种方法有什么区别,更重要的是,在哪些用例中我应该使用其中一种方法?

0 投票
1 回答
1047 浏览

c++ - 标准 C++ TCP 套接字,使用 std::async 时连接失败并出现 EINTR

当任务涉及套接字时,我无法使用 std::async 让任务并行执行。

我的程序是一个用标准 C++ 为 Linux 编写的简单 TCP 套接字服务器。当客户端连接时,会打开一个专用端口并启动单独的线程,因此每个客户端都在自己的线程中进行服务。

客户端对象包含在映射中。

我有一个向所有客户广播消息的功能。我最初是这样写的:

我已经对此进行了测试,它一次可以与 3 个客户端一起使用。消息到达所有三个客户端(一次一个),响应字符串在此循环中打印 3 次。但是,它很慢,因为消息一次只发送给一个客户端。

为了提高效率,我希望利用 std::async 为每个客户端异步调用 SendMessageToClient 函数。我像这样重写了上面的代码:

当地图中只有一个客户端时,上面的代码按预期运行。您很快看到“开始发送”,然后是“结束发送”,然后是“开始等待”,然后是 3 秒后(我在客户端响应端有 3 秒睡眠来测试这个),您会看到来自套接字的跟踪读取响应进来的函数,然后你会看到“结束等待”

问题是当地图中有多个客户端时。在打开并连接到套接字的 SendMessageToClient 函数部分中,它在下面标识的代码中失败:

输出内容为:“已连接的客户端线程:无法连接 4”。

我查看了这个错误代码,它是这样解释的:

我在互联网上四处搜索,我发现的只是一些关于系统调用被信号中断的引用。

有谁知道为什么当我一次调用一个发送消息函数时这会起作用,但是当使用异步调用发送消息函数时它会失败?有没有人有不同的建议我应该如何向多个客户发送消息?

0 投票
2 回答
334 浏览

c++11 - 检测线头

我想在 c++11 中检测线程结束,但我不知道该怎么做,它看起来像那个“get”块程序,这是我所做的:

我的程序在“run”方法中没有进入“else”,程序在未加载状态时卡在“this->thread->get()”上。

我该如何处理?

谢谢!

0 投票
1 回答
987 浏览

c++ - std::async 返回值。未知错误

我正在使用 c++ 中的 Windows Kinect。我正在尝试检查右手是否从右肩移到左肩,就像擦拭动作一样。我正在尝试使用 std::async 因为我需要该方法的返回值。我已经用谷歌搜索了我得到的错误,但不知道是怎么回事。

我使用的 2 种方法:

我有以下错误: