ZeroMQ (C++): отправка указателя с помощью inprocC++

Программы на C++. Форум разработчиков
Anonymous
ZeroMQ (C++): отправка указателя с помощью inproc

Сообщение Anonymous »

Я пробую ZeroMQ (zmq) для многопоточной программы.
Я хочу избежать копирования данных, которые необходимо передать работникам.
Моя идея заключалась в том, чтобы отправить указатель на данные как сообщение zmq.
Это работает. Но я обнаружил, что если я меняю данные внутри воркера, то продюсер (основной) этого не видит. Интересно, почему!
Вот пример:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

struct Foo {
explicit Foo(int value) noexcept
: _value{value}
{}
int _value;
};

void worker(void *context)
{
void *receiver = zmq_socket(context, ZMQ_REP);
zmq_connect(receiver, "inproc://example");

std::this_thread::sleep_for(std::chrono::milliseconds(20));

zmq_msg_t message;
zmq_msg_init(&message);
zmq_msg_recv(&message, receiver, 0);

char received[sizeof(Foo *)];
std::memcpy(&received, zmq_msg_data(&message), sizeof(Foo *));

//reinterpret_cast(received)->_value = 111;
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78770967/zeromq-c-sending-pointer-with-inproc[/url]

Вернуться в «C++»