Boost C++ Libraries/Boost.Asio

Boost.Asio 색인 - asio_handler_invoke

까마귀75 2021. 1. 5. 13:54
728x90
반응형

asio_handler_invoke

(더 이상 사용되지 않음: associated_executor 특성을 사용한다.) 핸들러의 기본 호출(invoke) 함수이다.

[1 / 2 오버로드] const형이 아닌 함수 개체에 사용되는 기본 핸들러 호출 훅(hook)이다.

template<
    typename Function>
asio_handler_invoke_is_deprecated asio_handler_invoke(
    Function & function,
    ... );


[2 / 2 오버로드] const형 함수 개체에 사용되는 기본 핸들러 호출 훅(hook)이다.

template<
    typename Function>
asio_handler_invoke_is_deprecated asio_handler_invoke(
    const Function & function,
    ... );


비동기 작업에 대한 완료 핸들러는 해당 개체(예: socket 또는 deadline_timer)와 연결된 io_context에 의해 호출(invoke)된다. 확실한 보장은 핸들러가 호출될 수 있는 경우 이루어진다. 이는 해당 io_context 개체에서 현재 run()을 호출한 스레드에서만 핸들러를 호출할 수 있기 때문이다. 이후 핸들러는 추가적인 보장을 제공하는 다른 개체(예: io_context::strand 개체)를 통해 호출(invoke)될 수 있다.

비동기 작업이 다른 비동기 작업에 의해 구성되는 경우, 모든 중간 핸들러는 최종 핸들러와 동일한 방법을 사용하여 호출(invoke)되어야 한다. 이는 사용자-정의 개체가 보장을 위반할 수 있는 방식으로 접근되지 않도록 하기 위해 필요하다. 이 훅킹(hooking) 함수는 각 중간 단계에서 최종 핸들러에 사용된 호출(invoke) 방법에 접근할 수 있도록 보장한다.

사용자 정의 호출(invoke) 전략을 지정하기 위해 자체 핸들러에 asio_handler_invoke를 구현한다.

이 기본 구현은 다음과 같은 함수 개체를 호출한다:

function();


필요한 경우 기본 구현에 함수 개체의 복사본을 만들어서 const형이 아닌 operator()를 사용할 수 있다.

예제

class my_handler;

template <typename Function>
void asio_handler_invoke(Function function, my_handler* context)
{
  context->strand_.dispatch(function);
}

요구사항

일반 헤더: boost/asio/handler_invoke_hook.hpp
편의 헤더: boost/asio.hpp

Boost.Asio 홈

728x90
반응형