c++ - 根据 boost 1.68 的文档,旧的 io_context::post 已被弃用。推荐使用 boost::asio::post() 。谁能给我举个例子吗?

标签 c++ boost asio

我想使用asio::io_context::post的功能。但我发现它被标记为“已弃用”

You can see it here (已弃用:使用 boost::asio::post()。)请求 io_context 调用给定的处理程序并立即返回。

然后我想尝试一下 boost::asio::post(),但我无法想象如何编写代码。没有示例,没有代码,甚至没有更多文档。

你能帮我吗? 非常感谢。

最佳答案

我有一个来自 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。如果您需要进一步的解释,请告诉我。

关于c++ - 根据 boost 1.68 的文档,旧的 io_context::post 已被弃用。推荐使用 boost::asio::post() 。谁能给我举个例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907067/

相关文章:

c++ - Asio 的计时器在取消时什么时候会抛出异常?

c++ Armadillo 转换/转换为整数类型 vector 或矩阵

c++ - 编译器没有看到第一行?

c++ - boost 线程 : Use of deleted function Error

c++ - 检测线程是否被操作系统中断

audio - NA音频: "Unable to instantiate ASIO. Check if STAThread is set"

c - undefined reference

c++ - Windows套接字编程中主机名的IP地址

c++ - Visual Studio 2010 外部工具参数为空

c++ - enable_shared_from_this - 空的内部弱指针?