c++ - No se puede usar create_async() con el componente WRL WinRT
microsoft-metro windows-runtime (1)
concurrency::create_async
solo se puede usar en C ++ / CX (esto puede no estar indicado expresamente en la documentación, pero todos los posibles tipos de devolución son tipos de sombrero, lo que indica que solo se puede usar en C ++ / CX).
WRL incluye la plantilla de clase base Microsoft::WRL::AsyncBase
, de la cual puede derivar para implementar operaciones asincrónicas utilizando C ++ y WRL.
No sé de una implementación canónica que envuelva std::future
o concurrency::task
, pero puede encontrar un ejemplo de una implementación en la biblioteca CxxReflect con licencia de Boost (buscar async_operation_base
y task_based_async_operation
).
Quiero escribir un componente WinRT con soporte asíncrono usando WRL, pero encontré que create_async()
está indefinido incluso ppltask.h
la ppltask.h
y using namespace concurrency
¿Cómo crear una tarea en segundo plano con el patrón WRL?
Mi función es como:
HRESULT GetStreamAsync([out, retval] IAsyncOperation<IRRandomAccessStream*>** operation);
También trato de usar IThreadPoolStatics->RunAsync()
, pero parece que solo se puede usar en caso de IAsyncAction
y sin valor de retorno. ¿Alguien puede ayudar?