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

c++ - std::promise set_exception 两次导致分段错误

假设我有一个调用不稳定的第三方服务的方法,所以我为这个调用添加了一个超时时间,比如 10 秒。这是我尝试过的:

什么时候call_third_party_service没有响应(假设它在 30 秒后抛出异常,说超时),status == std::future_status::timeout等待 10 秒后点击,然后promise.set_exception工作,一切看起来都很好。但是,当再次call_third_party_service引发异常时,promise.set_exception就会出现分段错误。实现这种模式的正确方法是什么?

0 投票
1 回答
778 浏览

c# - 如何使 C++ std::future 返回值适应 C# System.Threading.Tasks.Task?

我正在包装一个要从 .NET 使用的 C++ 库。C++ API 中有一些函数返回std::future. 我想让 .NET 代理类返回System.Threading.Tasks.Task

我想在 C++ 端添加一个替换方法,除了方法参数之外,它还需要一个函数指针。然后我可以启动一个新线程(std::async例如使用)并等待std::future::get。一旦std::future::get返回,我可以调用传入的函数指针。在 C# 方面,我会将 a 指针传递给将完成返回的任务的函数。就像是:

(是的,代码存在内存管理问题。不过应该足以理解这个想法)

0 投票
0 回答
95 浏览

visual-studio-2015 - 包含未来标头的代码中的 nvcc 编译错误

在我的 Windows 7 戴尔笔记本电脑上重新安装 VS2015 以使用 Update 3 版本后,我开始遇到编译带有未来标头的 cuda 项目的问题:

在重新安装之前,我已经安装了 VS2019 社区,首先我认为实际上与一个系统上的 Visuals 存在一些不好的相关性,所以我决定卸载它们并只安装 VS2015,因为我的 GPU 具有 2.0 计算能力但它没有帮助。在控制台项目中,带有未来标头的代码编译得很好

0 投票
1 回答
93 浏览

c++ - 有没有办法为任何函数编写通用代码,以便它可以(异步)执行并从线程池获得返回值?

我一直在尝试创建一个线程池类(用于个人实验/使用/乐趣)。我找到了一种通过使用参数包(见下面的代码)并将函数绑定到 std::function 来接受具有任何参数/返回类型的任何函数的方法。这没有问题。问题是我想尝试创建一个成员函数来从正在执行的作业中检索返回值。在尝试执行此操作时,我不知道如何使代码通用。

到目前为止,我已经尝试制作一个地图,它使用作业 ID 作为键,并将该作业的返回值存储在其中。我的挣扎是 1. 我不知道如何确定类型(我可以使用“typename std::invoke_result::type”,但如果类型为 void,这会崩溃) 2. 如何制作可以拥有 Job 的地图ID 作为键和任何类型,以便我可以将返回类型放在那里。

我对这一切都错了吗?我不知道任何其他方法可以通用地存储任何类型的函数,同时还能从中获取返回类型。

0 投票
1 回答
2386 浏览

c++ - std::promise 是否在内部使用 std::condition_variable 来通知关联的 std::future?

我的问题是是否通过使用std::promise通知关联? std::futurestd::condition_variable

std::promise我搜索了这个网站的源代码。但我没有在其成员数据中看到std::promise有。std::condition_variable

0 投票
2 回答
217 浏览

c++ - 如何将基于范围的 for 循环与未来向量一起使用

我有一个程序可以计算不同线程中的一些值std::packaged_task<int()>。我将std::future通过打包任务获得的信息存储get_future()在一个向量中(定义为std::vector<std::future<int>>)。

当我计算所有任务的总和时,我使用了一个 for 循环并且它正在工作:

但我宁愿使用基于范围的 for 循环:

目前我收到一个编译错误与clang:

是否可以将基于范围的 for 循环vectorof一起使用future<int>

0 投票
1 回答
512 浏览

c++ - Is it thread-safe to declare a std::future class member as being mutable?

Is it safe (thread-safe) to declare a std::future as being mutable since its get() function changes its state. I assume that it's like std::mutex which is safe to be made mutable.

0 投票
2 回答
67 浏览

c++ - 测量 std::future 对象可用之前的时间

我正在尝试测量返回std::future对象的 API 调用的持续时间。

我目前的方法如下所示:

但是,我不确定std::future::wait_for. cppreference.com指出:

由于调度或资源争用延迟,此函数可能会阻塞超过 timeout_duration。

我不担心阻塞时间超过 timeout_duration,但我确实需要wait_for在对象可用后立即返回std::future,即没有按照

这是有保证的吗?

0 投票
1 回答
89 浏览

c++ - 如果第二个未来有异常,如何停止第一个未来

我有一个像这样的代码:

如果在第二个未来抛出异常,我只会在第一个未来完成时收到它。有没有办法中断所有的期货?

0 投票
1 回答
39 浏览

c++11 - 一旦创建,我可以将 std::sync(std::launch::deferred 策略更改为 std::launch::async 吗?

我处于一个场景中,我有许多 I/O 绑定任务,非常适合在后台运行。但是,我不能同时启动所有这些。

尽管我可以使用其他技巧(例如计数信号量),但我想知道是否可以将已经创建的 std::async(deferred) (嗯,未来,现在)策略更改为async每次期货完成时(嗯,种类的,但我希望你能得到一些背景信息)。

一旦我有了deferred未来,启动它的唯一方法就是阻塞直到它结束(等待或获取,甚至不是 wait_for)。我只想让它运行,但不等待它完成(现在;我会接受这个块,但稍后)。