1

我想使用 WRL 编写一个支持异步的 WinRT 组件,但我发现create_async()即使我包含了ppltask.h以及using namespace concurrency 如何使用 WRL 模式创建后台任务?

我的功能是这样的:

HRESULT GetStreamAsync([out, retval] IAsyncOperation<IRRandomAccessStream*>** operation);

我也尝试使用IThreadPoolStatics->RunAsync(),但似乎只能在有IAsyncAction和没有返回值的情况下使用。有人可以帮忙吗?

4

1 回答 1

1

concurrency::create_async只能在 C++/CX 中使用(这可能在文档中没有明确说明,但是所有可能的返回类型都是帽子类型,表明它只能在 C++/CX 中使用)。

WRL 包括Microsoft::WRL::AsyncBase基类模板,您可以从中派生以使用 C++ 和 WRL 实现异步操作。

我不知道包装std::futureor的规范实现,但您可以在 Boost 许可的CxxReflect 库concurrency::task中找到一个实现示例(搜索and )。async_operation_basetask_based_async_operation

于 2012-10-15T17:36:01.353 回答