Новый экземпляр класса в сегменте разделяемой памяти C ++ - PullRequest
2 голосов
/ 08 мая 2020

Я на самом деле пытаюсь активизировать поток, процесс и разделяемую память в C ++, но на самом деле я застрял со своим межпроцессным взаимодействием. некоторые в прошлом проекте, но никогда с несколькими процессами.

Вот моя проблема, я не могу получить события регистрации от другого процесса. Я думаю, что инициализация моей очереди сообщений в сегменте общей памяти решит проблему, но я не могу понять, как «заставить» новый экземпляр моего класса находиться в моем сегменте общей памяти

Потому что я начинаю с разделяемой памятью в C ++ я использую boost Simple Exemple

В идеале то, что я хотел бы, было бы примерно таким:

int main (void)
{
    shared_memory_object shm (open_or_create, "MySharedMemory", read_write);

    // initialise shm using boost Simple Exemple

    shmPtr = region.get_address();

    // initialise message queue named msgQueue in my shared memory segment

    msgQueuePtr = &msgQueue;

}

В конце, shmPtr будет быть равным msgQueuePtr.
Любая помощь будет оценена.

1 Ответ

1 голос
/ 09 мая 2020
• 1000
#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>

struct MyQueue { /* */ };

namespace bip = boost::interprocess;

int main() {
    bip::managed_shared_memory msm(bip::open_or_create, "test", 10ul<<30); // 10 MiB
    MyQueue& q = *msm.find_or_construct<MyQueue>("queue_instance")();
}

Вот более крупная демонстрация с реализацией очереди + блокировкой et c. Повышение общей памяти и проблема синхронизированной очереди / cra sh в потребительском процессе

БОНУС

Boost Interprocess имеет полную реализацию message_queue: https://www.boost.org/doc/libs/1_73_0/doc/html/boost/interprocess/message_queue.html

Так что, если есть сомнения, я предлагаю использовать это.

...