问题标签 [packaged-task]

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 投票
2 回答
1945 浏览

c++ - 将 packaged_task 移动到 lambda

我想在 lambda 中移动并调用 boost::packaged_task 。

但是,我想不出一个优雅的解决方案。

例如,这不会编译。

我相当丑陋的解决方案:

将 packaged_task 移动到调用它的 lambda 中的“正确”方法是什么?

0 投票
3 回答
4928 浏览

c++ - 如何使用返回任意类型的函数创建一个包含 boost::packaged_task<> 的队列?

我正在尝试构建一个需要由一个线程执行并且可以由多个线程提供的函数的工作队列。为此,我计划使用 boost::packaged_task 和 boost::unique_future。这个想法是你会这样做:

Foo 值 = queue.add(myFunc).get();

这将阻塞,直到函数被执行。所以 queue.add(...) 接受一个 boost::function,并返回一个 boost::unique_future。然后它在内部使用 boost::function 作为其构造函数创建一个 boost::packaged_task。

我遇到的问题是 boost::function<...> 每次都不一样。具体来说,它的返回值会改变(但是,函数永远不会接受任何参数)。因此,我必须有一个看起来像这样的 add 函数:

好吧,这似乎还不错,但后来我遇到了如何定义“队列”的问题。我想我别无选择,只能使用 boost::any,因为类型不会是恒定的:

但是当我尝试实现我的 executeSingle 时遇到了一个问题(只从队列中取出一个项目来执行):

这 '?' 表示我不确定的内容。我不能用模板调用 executeSingle,因为它是从单独的线程调用的。我尝试使用 boost::any,但出现错误:

有趣的是,此时我其实并不关心 packaged_task 的返回类型,我只想执行它,但我可以弄清楚模板的详细信息。

任何见解将不胜感激!

0 投票
1 回答
657 浏览

multithreading - 使用 C++0x 线程库退出时崩溃

我刚开始尝试新的 C++0x 线程库,最后我得到了几个并行运行的计算任务。该示例需要一秒钟才能运行,这是我的预期,但它在退出时崩溃。知道我做错了什么吗?

gdb 回溯如下:

0 投票
2 回答
8166 浏览

c++ - 如何创建带有参数的 packaged_task?

按照这个关于期货承诺打包任务的优秀教程,我到了想要准备自己的任务的地步

据我可以破译 gcc-4.7.0 错误消息,它期望的参数不同吗?但是怎么做?我尝试缩短错误消息:

我的变体是如何提供错误的参数ackermann吗?还是模板参数错误?我不给3,11创建线程的参数吧?

更新其他不成功的变体:

嗯……是我,还是 beta-gcc?

0 投票
0 回答
233 浏览

c++ - 将 std::bind 占位符添加到函数参数

我正在使用 Merge 类来封装合并排序。我想使用一个打包的任务来多线程递归调用:

我只是想知道我是否可以像这样绑定打包的任务:

0 投票
1 回答
280 浏览

c++ - cppreference 在这个例子中的任务是什么?

在from cppreference的这个描述的例子中packaged_task,出现了一个名为的类task。它是什么?

0 投票
1 回答
1673 浏览

c++ - 使用 std::packaged_task (VS11) 时,std::future 仍会延迟

似乎除非你调用std::asynca ,否则std::future永远不会设置为任何其他状态,future_status::deferred除非你调用getor waitwait_for&wait_until将继续不阻塞并返回,future_status::deferred即使任务已经运行并存储了结果。

这是一个例子:

我没有当前的 C++11 标准,但 30.6.9 中的标准草案说,当 apackaged_task运行时,它应该将结果存储在未来的共享状态中。目前还不清楚这是否包括设置预期wait_until/wait_for行为。

asyncVS11 在此区域的调用行为之前存在问题:http: //social.msdn.microsoft.com/Forums/hu/parallelcppnative/thread/4394f2c1-0404-40df-869b-f4fc36fc035c

此外,其他编译器似乎在这方面存在问题:C++ 11 future_status::deferred not working

任何可能更了解该标准的人:这是预期的行为还是在 VS11 中的实施存在问题?

更新:我不知何故错过了这个报告:http ://connect.microsoft.com/VisualStudio/feedback/details/761829/c-11-unexpected-behavior-for-std-future-wait-for-and-std-打包任务

0 投票
1 回答
1741 浏览

c++ - 匿名 std::packaged_task

我正在尝试围绕 Glib::Dispatcher 构建一些包装器,以将任何功能类型分派到调度程序中。我想要一些函数调度,可以将函数转移到 Glib 主循环中:

这个函数将从 f(args) 创建一个打包的任务并返回它的未来:

我现在需要从这个任务中创建 astd::packaged_task<void()>以将它们放入一个 std::queue 中,以便连接到 Glib::Dispatcher 的函数可以执行它们。

我的问题是:如何分两步从 a 创建,以便我可以从第一个任务返回它的未来并将第二个任务放入类型队列std::packaged_task<R()>中?std::packaged_task<void()>std::queue<std::packaged_task<void()>>

0 投票
2 回答
1411 浏览

c++ - 将 std::packaged_task 包装在自定义类中

我正在尝试将 std::packaged_task 包装在另一个类中,以便与任务调度程序一起使用。

目前,除了 std::future 支持外,我一切正常。为了获得 std::future 支持,我发现我需要将 std::packaged_task 用于它提供的 get_future() 函数。

我整天都在尝试各种方法来让它工作,但我似乎无法使用来自 std::bind 的返回值正确声明和初始化 packaged_task。我试图破译所有相关 libstdc++ 函数的实现,例如 std::async、std::future、std::thread 等,但没有运气。

以下代码是非工作版本和工作版本的实现。要使其正常工作,请取消注释两个 /* --- WORKS*/ 并注释其他相关行。

我在想问题是typename result_of<callable>::type。我猜它没有正确评估callable函数的返回类型。

我正在c++ (Built by MinGW-builds project) 4.8.0 20121225 (experimental)使用Windows 8 64bit. 我怀疑这些错误无关紧要,因为我想我只是试图以错误的方式完成这项工作,但无论如何这里是错误的粘贴箱:错误

0 投票
3 回答
3009 浏览

c++ - 为什么是 std::packaged_task无效?

使用 MSVC2012,

以下代码将按预期编译和运行

而以下代码将无法编译和运行

为什么会这样?

编辑:作为一种解决方法,可以使用 std::promise 在返回 void 的函数上获取 std::future

请注意,在带有 std::thread 的 vs2012 库中存在一个错误,该错误会强制您将承诺作为左值引用传入并将承诺移入,如果您通过值或通过 r- 传递承诺,它将无法编译价值参考。这可能是因为实现使用了 std::bind() ,它的行为不符合预期。