c++ - boost asio在两个线程c++之间进行通信

标签 c++ multithreading boost boost-asio

我正在使用 boost asio 创建客户端和服务器应用程序。情况是我创建了一个线程来实例化服务器对象,而主线程将实例化客户端对象。这些对象中的每一个都有自己的 io_service,它们在两个线程中彼此独立运行。我现在需要的是我想在不使用客户端和服务器之间的套接字的情况下将一些信息从服务器对象传回主线程。我需要传递的信息是服务器使用端口(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");
}

(这是一个有点疯狂的猜测,因为你没有用准确的术语准确描述你的问题)

关于c++ - boost asio在两个线程c++之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817250/

相关文章:

C++:如何在没有 mingwm10.dll 的情况下发布单个可执行文件

multithreading - 具有分布式后台工作的 Azure Web 角色

java - 没有 static 的 volatile 关键字无法按预期工作

c++ - boost serialization 1.5.5 在遇到 Nan 和 Inf 时崩溃

c++ - 获取所有基类 [元编程]

c++ - 标题和模板类中的 namespace 包含

c++ - 在 C++ 中创建二维数组并在 MATLAB 中使用它

c++ - 无法从 glReadpixels 创建 HBITMAP

java - 线性化阶数的确定

python - boost::python: Python 列表到 std::vector