Я хочу написать компонент WinRT с асинхронной поддержкой с использованием WRL, но я нашел create_async()
не определено, даже я включил 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 (ищи async_operation_base
а также task_based_async_operation
).
Других решений пока нет …