Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 根据boost 1.68的文档,旧的io_context::post已被弃用。已重新命名boost::asio::post()。谁能给我举个例子吗?_C++_Boost_Asio - Fatal编程技术网

C++ 根据boost 1.68的文档,旧的io_context::post已被弃用。已重新命名boost::asio::post()。谁能给我举个例子吗?

C++ 根据boost 1.68的文档,旧的io_context::post已被弃用。已重新命名boost::asio::post()。谁能给我举个例子吗?,c++,boost,asio,C++,Boost,Asio,我想使用asio::io_context::post的特性。但我发现它被标记为已弃用 (不推荐使用:使用boost::asio::post())请求io_上下文调用给定的处理程序并立即返回 然后我想尝试一下boost::asio::post(),但我无法想象如何编写代码。没有示例,没有代码,甚至没有更多文档 你能帮我吗? 非常感谢。我有一个使用boost.asio的RTSP服务器的真实示例: using udp_buffer = std::array<char, 0xFFFF>;

我想使用asio::io_context::post的特性。但我发现它被标记为已弃用

(不推荐使用:使用boost::asio::post())请求io_上下文调用给定的处理程序并立即返回

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

你能帮我吗?
非常感谢。

我有一个使用boost.asio的RTSP服务器的真实示例:

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 {...}
使用udp_buffer=std::array;
使用共享的udp\usocket=std::tuple;
void rtsp::rtsp_服务器::处理\u传入的\u udp_流量(const boost::system::error\u代码和错误,
std::接收字节的大小,
rtsp::rtsp_服务器::共享_udp_套接字和传入_套接字){
如果(错误)
抛出std::runtime_error{error.message()};
自动数据=标准::使_共享();
std::copy_n(std::get(传入的_套接字).cbegin(),接收的_字节,std::back_插入器(*数据));
boost::asio::ip::udp::endpoint从\u endpoint=std::get(传入的\u套接字)接收到\u;
boost::asio::post(std::get(传入的\u套接字).get\u io\u context(),
std::bind(&rtsp::rtsp\u服务器::处理新的\u传入的\u消息,
数据,标准::ref(输入_插座),
从\u端点接收到\u,
std::ref(此->服务器状态)
);
启动异步接收(传入套接字);
}
void rtsp::rtsp\ U服务器::处理\新\传入\消息(std::共享\ ptr消息,
共享的\u udp\u套接字和从中接收的套接字,
boost::asio::ip::udp::endpoint从\u endpoint接收到\u,
服务器::rtsp_服务器_状态和服务器_状态{…}

在这里,您可以看到我如何使用
boost::asio::post
将传入UDP数据报的处理发布到iocontext,同时开始通过
start\u async\u receive
重新侦听UDP套接字上的新传入数据报。如果需要进一步解释,请告诉我。

您为什么要使用
tuple
instea具有相同成员的
struct
的d?好问题,我不知道。可能是因为我认为“这就是
tuple
s的用途”.经过一番思考后,我会说,不要把带有结构定义的接口弄得乱七八糟,但因为这是一个也不算数的私有接口。我想我应该在某个时候重构它。这就是我想要的。非常感谢。代码看起来很奇怪……不要让自己被我的整个元组所困扰,因为套接字对象是不是线程安全的,boost引用从发送方接收的下一个端点。这是我将传入UDP消息解复用到处理程序的方法,该处理程序稍后将回复UDP发送方端点,并通过串进行同步。我说UDP套接字,因为您已经需要一个用于IPv4,一个用于IPv6。TCP连接处理是稍微简单一点。(RTSP同时支持,和UDP的连接语义,所以在其他情况下,您可以做得简单得多)