Какой io_context использует std :: boost :: asio :: post / dispatch? - PullRequest
0 голосов
/ 22 сентября 2018

При использовании boost :: asio 1.66 я прочитал в документации, что boost::asio::io_context::post устарело для boost::asio::post, то же самое для boost::asio::io_context::dispatch.Потому что до того, как они стали членами-членами io_context, и, конечно, обработчик должен выполняться в контексте некоторого io_context, т. Е. executor, мой вопрос:

Как повысить:: asio :: io_context :: post простейшая перегрузка знает, какую io_context то есть executor использовать?

В документации template< typename CompletionToken> DEDUCED post(CompletionToken && token); говорится, что

Получаетсвязанный с executor объект-обработчик ex, выполняя get_associated_executor (handler).

Но документация get_associated_executor также не проясняет мне это.Я предполагаю, что из-за вывода аргумента шаблона он может каким-то образом получить его в выполняемом в данный момент обработчике, но я хочу убедиться, а также, этого будет недостаточно, если я вызову post вне буста:: Asio Handler.

1 Ответ

0 голосов
/ 23 сентября 2018

Ядро документации найдено с чертой associated_executor :

  • get()

    Если T имеетвложенный тип executor_type, возвращает t.get_executor ().В противном случае возвращает ex.

  • executor_type

    Если T имеет вложенный тип executor_type, T :: executor_type.В противном случае Executor.

Если ваш тип обработчика¹ имеет вложенный тип executor_type, то предполагается, что вызов token.get() вернет правильного исполнителя для использования.

Если вы передадите ванильный вызов для публикации без указания контекста исполнителя / исполнения, вы получите созданный по умолчанию экземпляр контекста исполнения: boost::asio::system_executor.

Целью этого является реализацияDoTheRightThing с пользовательскими типами обработчиков.Например, если вы публикуете что-то в цепочке, обработчик будет упакован в тип, специфичный для реализации цепочки.Функции-члены associated_executor trait и ditto get_executor() будут затем координировать направление к исполнителю для этой цепочки.


¹ или любому токену, если ваша модель вызова отличается, например контекст урожайности

...