不能将create_async()与WRL WinRT组件一起使用

时间:2012-10-15 07:12:55

标签: c++ microsoft-metro windows-runtime wrl

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

我的功能如下:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

我不知道包含std::futureconcurrency::task的规范实现,但您可以在Boost许可CxxReflect library中找到实施示例(搜索{{ 1}}和async_operation_base)。