C++ boost asio在两个线程c++;

C++ boost asio在两个线程c++;,c++,multithreading,boost,boost-asio,C++,Multithreading,Boost,Boost Asio,我正在使用BoostASIO创建一个客户机和服务器应用程序。情况是,我创建了一个线程来实例化服务器对象,而主线程将实例化客户机对象。这些对象中的每一个都有自己的io_服务,它们在两个线程中独立运行。我现在需要的是将一些信息从服务器对象传回主线程,而不使用客户端和服务器之间的套接字。我需要传递的信息是服务器使用端口(0)获取的端口以及服务器从客户端接收的请求 代码太多太少,但下面是: #include <boost/asio.hpp> #include <boost/option

我正在使用BoostASIO创建一个客户机和服务器应用程序。情况是,我创建了一个线程来实例化服务器对象,而主线程将实例化客户机对象。这些对象中的每一个都有自己的io_服务,它们在两个线程中独立运行。我现在需要的是将一些信息从服务器对象传回主线程,而不使用客户端和服务器之间的套接字。我需要传递的信息是服务器使用端口(0)获取的端口以及服务器从客户端接收的请求

代码太多太少,但下面是:

#include <boost/asio.hpp>
#include <boost/optional.hpp>
#include <boost/thread.hpp>
#include <iostream>

using namespace boost::asio;

struct asio_object {
  protected:
    mutable io_service io_service_;
  private:
    boost::optional<io_service::work> work_ { io_service::work(io_service_) };
    boost::thread th    { [&]{ io_service_.run(); } };

  protected:
    asio_object() = default;
    ~asio_object() { work_.reset(); th.join(); }
};

struct Client : asio_object {
  public:
    void set_message(std::string data) {
        io_service_.post([=]{ 
                message = data; 
                std::cout << "Debug: message has been set to '" << message << "'\n";
            });
    }
  private:
    std::string message;
};

struct Server : asio_object {
    Client& client_;
    Server(Client& client) : client_(client) {}

    void tell_client(std::string message) const {
        client_.set_message(message);
    }
};

int main()
{
    Client client;
    Server server(client);

    server.tell_client("Hello world");
}
#包括
#包括
#包括
#包括
使用名称空间boost::asio;
结构asio_对象{
受保护的:
可变io_服务io_服务;
私人:
boost::可选工作{io_服务::工作(io_服务)};
boost::线程th{[&]{io_服务{.run();};
受保护的:
asio_对象()=默认值;
~asio_object(){work_uu.reset();th.join();}
};
结构客户端:asio_对象{
公众:
void set_消息(标准::字符串数据){
io_服务_uu.post([=]{
信息=数据;

std::cout很难弄清楚您想要什么。我已经将一些示例代码拼凑在一起。如果没有答案,请使用它为您的问题创建SSCCE。这是一个非常模糊的问题。通常,使用多个
io\U服务
对象的应用程序可以通过到各自的io\U服务来相互通信。