Не могу использовать create_async() с компонентом WRL WinRT
Я хочу написать компонент WinRT с асинхронной поддержкой с использованием WRL, но я нашел create_async()
не определено, даже я включил ppltask.h
а также using namespace concurrency
Как создать фоновую задачу с шаблоном WRL?
Моя функция похожа на:
HRESULT GetStreamAsync([out, retval] IAsyncOperation<IRRandomAccessStream*>** operation);
Я тоже пытаюсь использовать IThreadPoolStatics->RunAsync()
, но, кажется, это может быть использовано только в случае IAsyncAction
и без возвращаемого значения. Кто-нибудь может помочь?
1 ответ
concurrency::create_async
может использоваться только в C++/CX (это не может быть явно указано в документации, но все возможные типы возвращаемых данных являются типами hat, что указывает на то, что он может использоваться только в C++ / CX).
WRL включает в себя Microsoft::WRL::AsyncBase
шаблон базового класса, который вы можете использовать для реализации асинхронных операций с использованием C++ и WRL.
Я не знаю канонической реализации, которая оборачивает std::future
или же concurrency::task
, но вы можете найти пример реализации в Boost-лицензированной библиотеке CxxReflect (найдите async_operation_base
а также task_based_async_operation
).