问题标签 [ppl]
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++ - WinRT WRL WinRtClassicComMix 和 IAsyncOperation 失败
我有一个 C++ WinRT 组件,它是一个 WinRtClassicComMix。我想定义一个方法,该方法通过 IAsyncOperation 将自定义类返回到调用 C# 或 WinJS 代码。当使用没有返回值的 IAsyncAction 时一切正常,但是使用带有自动返回值的 PPL 的 create_async 会使 VS 2012 和 VS 2013 编译器崩溃。
相关细节:
接口和类在 IDL 中定义:
对应的头文件:
和 CPP:
编译失败并导致 VS C++ 编译器崩溃:
错误 1 错误 C1001:编译器发生内部错误。c:\program 文件 (x86)\microsoft visual studio 11.0\vc\include\ppltasks.h 5513 1 MyControl
原因是将 create_async 分配给 asyncOp 自动变量的行。我无法明确定义该变量,因为我无法确定正确的类型。:( 它可能需要是帽子类型,但是 ABI::MyControl::MyComponentColorTable* 不能声明为 ^ 因为它没有定义为 WinRT 类,所以我假设 create_async 在这里根本不能使用,但是如何那么我可以创建并返回我的类型的 WinRT IAsyncOperation 吗?MyComponentColorTable 需要什么才能通过 WinRT 传回?IAvatarComponentColorTable 不能用作返回类型,因为它是 [exclusiveto(AvatarComponentColorTable)]。:(
c++ - concurrency::when_all 的返回向量的结果是 FIFO 吗?
Concurrency::when_all 函数返回一个std::vector<T>
它等待的所有任务的返回值。
向量中的值是按任何顺序排列的,还是按任务完成的顺序排列的?
c++ - 将引用作为任务数据传递 - 运行任务时的相同值
今天,我正在尝试为个人项目制作任务管理器。
我写了以下方法:
我用以下示例调用它:
和
问题是,在调试模式下(使用 Visual Studio 2013),我有以下结果:
和
第二个测试有大问题不是吗?:-)
如果我在发布模式下测试:
你好 3 你好 3 你好 3
和
你好 2 你好 2 你好 2
出色地。我觉得这很奇怪。我在网上搜索过,但一无所获。我刚刚看到,如果我在“make_task”或“create_task”(PPL)之外运行我的函数,所有结果都很好:
有人有想法可以帮助我吗?
先感谢您
c++ - 使用 ppl.h 查找最大值
C++ 的 ppl 库中是否有一个简单的函数,您可以在其中执行类似Concurrency::max(vec)
vec 是数字向量的操作?我可以自己写,但我希望我可以为自己节省工作。
编辑:对不起,我可能不够清楚。我需要 max 函数来利用并行化。
c++ - 如何使用 casablanca (PPL) http_client 返回的 XmlLite 处理 XML?
我想向 Web 服务发出请求,获取 XML 内容,然后解析它以获取服务返回的特定值。
代码将使用本机 C++11 (MS Visual Studio 2013) 编写。选择了Cassablanca PPL 库。对于 XML 解析,选择了 XmlLite。
我习惯了 C++ 编程;然而,PPL 库中的异步任务编程——方法——对我来说是新的。我知道什么是异步编程,也知道并行编程的原理。但是,我不习惯使用延续 ( .then(...)
),我只是慢慢地围绕这个概念展开思考。
到目前为止,我已经修改了示例以获取 XML 结果并将其写入文本文件:
现在,我需要了解如何修改代码以获取可以使用 XmlLite 的结果(Microsoft 实现,如xmllite.h
、xmllite.lib
和xmllite.dll
在 PPL 相关的流和其他类中仍然有点迷失。我不知道如何正确使用它们。非常欢迎任何解释。
cassablanca 的人说他们使用 XmlLite 和 Cassablanca 来处理结果,但我没有找到任何示例。你能指点我一些吗?谢谢。
更新(2014 年 6 月 4 日):上面的代码实际上被包装成这样的函数(wxString
来自 wxWidgets,但可以很容易地用std::string
or替换它std::wstring
):
实际上,目标不是将流写入test.xml
文件以提供 XmlLite 解析器。XML 相当小,它包含一个或多个(如果地址不明确)带有我要提取的 x 和 y 属性的项目元素——就像这样:
我不需要那个test.xml
文件。如何获取流以及如何将其重定向到 XmlLite 解析器?
c++11 - 在 PPL Casablanca 中并行执行 http_client 请求?
背景:我有一个简单的 C++11 应用程序,它使用wxWidgets wxListView
来显示客户的街道地址。目标是通过实现该服务的 Web 服务从地址(地理编码)获取 GPS 坐标。我能够通过 PPL Casablanca 获得单个地址的 Web 服务响应(以某种方式进行改进)——请参阅我之前的问题中的代码。
问题: PPL Casablanca 并行启动多个异步请求是否有意义?拥有多个处理器内核,是否会加快获得结果的速度?(Web 服务可能是为并行处理许多请求而构建的。)如何使用 PPL Casablanca 编写它?
我擅长 C++,但我只是在学习 C++11 的特性,包括 lambda。对我来说最大的不同是方法——延续、异步任务等——以及如何正确有效地使用它。
c++ - 将 concurrent_vector 转换为 std::vector
我正在寻找将 aconcurrent_vector
从 PPL 库转换为普通 std::vector 的推荐方法。
我有一个函数,它以 a 形式返回其结果,std::vector
但可能会或可能不会在内部使用并行算法。目前我正在使用insert
将元素从并发向量复制到法线向量:
虽然目前插入操作的性能并不是一个真正的问题(与函数体相比),但它似乎没有必要,我想知道是否有更好的解决方案(顺便说一句:Foo
是一个无法移动的简单 POD)。
理想情况下,我希望有类似的东西
或者至少
关于如何正确执行此操作有什么建议吗?
编辑:
与往常一样,我忽略了最明显的简化(克里斯建议):
虽然它(很可能)没有摆脱它看起来更干净的副本。
编辑2:
这让我想到 - 假设没有办法显式阻止向量数据的副本 - 编译器在仍然应用RVO
或对函数的返回值进行移动操作
c++ - PPL 任务 - 在桌面应用程序的 UI 线程中继续
我想使用 ppl 任务在后台做一些工作,并在完成后在窗口中显示结果。在我的例子中,UI 框架是 MFC。结构将是:
问题是,非 Windows 应用商店应用不允许指定 task_continuation_context。相反,运行时决定将使用哪个上下文(请参阅task_continuation_context 类)。我可以依靠运行时可靠地确定它需要在 UI 线程上运行延续吗?是否有合理的解决方法来实现我想要的 - 不阻塞 UI 线程?
更新:到处玩表明运行时不会在 UI 线程上运行延续。那么,这不可能吗?
c++ - 为什么在这种情况下 PPL 比顺序循环和 OpenMP 慢得多
关于我对 CodeReview 的问题,我想知道为什么 PPL 实现两个向量的简单变换比顺序和使用 OpenMP 的 for 循环std::plus<int>
慢得多(顺序(带矢量化):25ms,顺序(不带矢量化) std::transform
:28ms,C++AMP:131ms,PPL:51ms,OpenMP:24ms)。
我使用以下代码进行分析,并在 Visual Studio 2013 中进行了全面优化:
c++ - 如何从结果创建 concurrency::task?
我想创建一个已经从给定结果完成的新任务。我目前的解决方法是:
有更好的吗?
问题在于以下代码:
如您所见,我的函数是异步的,它依赖于另一个异步函数。但有时我可以退出应用程序,例如如果异步任务已经完成。在这种情况下,我需要返回一个返回指定结果的可继续任务。