gpt4 book ai didi

c++ - Boost 的 ASIO 和隐藏那些棘手的 io_service 对象

转载 作者:行者123 更新时间:2023-11-30 04:33:34 27 4
gpt4 key购买 nike

所以,我有这门课。它应该是一个单例,但没有理由你不能做更多。

其中,有两个线程。一个是 io_service->run() 等待传入的 UDP 数据包。另一个用于发送广播。

我按照这里的例子: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/echo/async_udp_echo_server.cpp

效果很好。唯一的问题是我不想在外部提供 io_service,而是将它隐藏在类内部。

我还没有通读所有的 io_service 文档,但是是否有可能在一个对象实例中有一些私有(private)版本的 io_service ? Socket 的构造函数让完成这项工作变得异常困难。

您将如何更改示例以将内容隐藏在线程中?

我也是一个巨大的 C++ 菜鸟 :P

最佳答案

好的!与我一起工作的人继承了这个可怕的图书馆并解决了我的问题......

在类中隐藏 io_service 是绝对可能的,但是!您必须在套接字对象之前定义 io_service 对象。您指定子构造函数的顺序根本无关紧要。

例子:

  Works:
boost::asio::io_service io_service;
udp::socket socket_;
udp::endpoint sender_endpoint_;
enum { max_length = 1024 };
char data_[max_length];

doesn't work:
udp::socket socket_;
boost::asio::io_service io_service;
udp::endpoint sender_endpoint_;
enum { max_length = 1024 };
char data_[max_length];

所以,这就是导致我出现问题的原因。

关于c++ - Boost 的 ASIO 和隐藏那些棘手的 io_service 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753534/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com