我想使用WRL编写一个具有异步支持的WinRT组件,但是我发现create_async()
是 undefined 的,即使我包含了ppltask.h
和using namespace concurrency
如何使用WRL模式创建后台任务?
我的功能是这样的:
HRESULT GetStreamAsync([out, retval] IAsyncOperation<IRRandomAccessStream*>** operation);
我也尝试使用
IThreadPoolStatics->RunAsync()
,但似乎只能用于IAsyncAction
且没有返回值。有人可以帮忙吗? 最佳答案
concurrency::create_async
仅在C++ / CX中可用(文档中可能没有明确说明,但是所有可能的返回类型都是hat类型,表明它仅在C++ / CX中可用)。
WRL包括 Microsoft::WRL::AsyncBase
基类模板,您可以从该模板派生该模板来使用C++和WRL实现异步操作。
我不知道包装 std::future
或 concurrency::task
的规范实现,但是您可以在Boost许可的CxxReflect library中找到实现的示例(搜索async_operation_base
和task_based_async_operation
)。
关于c++ - 无法与WRL WinRT组件一起使用create_async(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12890841/