Передать указатель через boost :: interprocess :: message_queue - PullRequest
3 голосов
/ 05 января 2011

Я пытаюсь сделать так, чтобы приложение A отправляло приложению B указатель на объект, который A выделил в общей памяти (используя boost :: interprocess).Для передачи этого указателя я намерен использовать boost::interprocess::message_queue.Очевидно, что прямой необработанный указатель из A недопустим в B, поэтому я пытаюсь передать offset_ptr, выделенный в общей памяти.Однако это также не похоже на работу.

Процесс A делает это:

typedef offset_ptr<MyVector> MyVectorPtr;
MyVectorPtr * myvector;    
myvector = segment->construct<MyVectorPtr>( boost::interprocess::anonymous_instance )();

*myvector = segment->construct<MyVector>( boost::interprocess::anonymous_instance )
        (*alloc_inst_vec); ;

// myvector gets filled with data here

//Send on the message queue
mq->send(myvector, sizeof(MyVectorPtr), 0);

Процесс B делает это:

// Create a "buffer" on this side of the queue
MyVectorPtr * myvector; 
myvector = segment->construct<MyVectorPtr>( boost::interprocess::anonymous_instance )();
mq->receive( myvector, sizeof(MyVectorPtr), recvd_size, priority);

Как я вижу, в этомспособ сделать битовую копию указателя смещения, который делает его недействительным в процессе B. Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 06 января 2011

Кажется, вы можете обратиться к нему, как описано в этом сообщении в списке рассылки поддержки.

...