Согласно документу о повышении 1.68, старый io_context :: post устарел.boost :: asio :: post () рекомендуетсяКто-нибудь может дать мне пример? - PullRequest
0 голосов
/ 20 октября 2018

Я хочу использовать функцию asio :: io_context :: post.Но я обнаружил, что это было помечено как УСТАРЕЛО

Вы можете увидеть это здесь (устарело: используйте boost :: asio :: post ().) Запросите io_context для вызова данного обработчика и возвратанемедленно.

Тогда я хочу попробовать на boost :: asio :: post (), но я не могу представить, как написать код.Нет примера, нет кода, даже нет больше документов.

Вы можете мне помочь?Большое спасибо.

1 Ответ

0 голосов
/ 20 октября 2018

У меня есть реальный пример с моего RTSP-сервера, использующий boost.asio:

using udp_buffer = std::array<char, 0xFFFF>;
using shared_udp_socket = std::tuple<boost::asio::ip::udp::socket,
                boost::asio::io_context::strand,
                udp_buffer,
                boost::asio::ip::udp::endpoint>;

void rtsp::rtsp_server::handle_incoming_udp_traffic(const boost::system::error_code &error,
                                                    std::size_t received_bytes,
                                                    rtsp::rtsp_server::shared_udp_socket &incoming_socket) {
    if (error)
        throw std::runtime_error{error.message()};

    auto data = std::make_shared<std::vector<char>>();

    std::copy_n(std::get<2>(incoming_socket).cbegin(), received_bytes, std::back_inserter(*data));
    boost::asio::ip::udp::endpoint received_from_endpoint = std::get<3>(incoming_socket);

    boost::asio::post(std::get<1>(incoming_socket).get_io_context(),
                      std::bind(&rtsp::rtsp_server::handle_new_incoming_message,
                                data, std::ref(incoming_socket),
                                received_from_endpoint,
                                std::ref(this->server_state_))
    );

    start_async_receive(incoming_socket);
}
void rtsp::rtsp_server::handle_new_incoming_message(std::shared_ptr<std::vector<char>> message,
                                                shared_udp_socket &socket_received_from,
                                                boost::asio::ip::udp::endpoint received_from_endpoint,
                                                server::rtsp_server_state &server_state {...}

Там вы можете увидеть, как я использую boost::asio::post для отправки обработки входящей дейтаграммы UDP в iocontext, в то время какначало привязки к новым входящим датаграммам через сокет udp через start_async_receive.Если вам нужны дальнейшие объяснения, дайте мне знать.

...