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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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