Boost Asio общаться между двумя потоками C ++

0

Я использую boost asio для создания клиентского и серверного приложений. Ситуация в том, что я создал поток для создания экземпляра объекта сервера, в то время как основной поток будет создавать экземпляр объекта клиента. Каждый из этих объектов имеет свой собственный io_service, которые работают независимо друг от друга в двух потоках. Теперь мне нужно передать некоторую информацию из объекта сервера обратно в основной поток без использования сокета между клиентом и сервером. Информация, которую мне нужно передать, - это порт, который сервер приобрел с помощью порта (0) и запрос, который сервер получил от клиента.

  • 1
    Очень сложно понять, чего ты хочешь. Я хлопнул несколько примеров кода вместе. Пожалуйста, используйте его, чтобы создать SSCCE для вашего вопроса, если он не отвечает на него.
  • 0
    Это очень расплывчатый вопрос. Обычно приложения, использующие несколько объектов io_service могут связываться друг с другом, публикуя работу в соответствующем io_service.
Теги:
multithreading
boost
boost-asio

1 ответ

1

Там слишком мало кода, но здесь идет:

#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");
}

(Это немного дикая догадка, поскольку вы точно не описали свой вопрос в точном выражении)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню