2 つのプロセスが同じ共有メモリにアクセスしようとしています。my_custom_class* で deque を作成する process1 があります。my_custom_class にはいくつかの整数が含まれています。
typedef boost::interprocess::allocator<my_custom_frame*, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
typedef boost::interprocess::deque<my_custom_frame*, ShmemAllocator> VideoDeque;
boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only, "MySharedMemory", 100000000);
video_deque = segment.construct<VideoDeque>("VideoDeque")(alloc_inst);
カスタム アロケータを使用して共有メモリに両端キューを作成した後、共有メモリで allocate メソッドを使用して my_custom_frame を作成します。最初に my_custom_frame のサイズのメモリを割り当て、次に配置 new() を使用して、そこに my_custom_frame オブジェクトを作成します。
temp1 = segment.allocate(sizeof(my_custom_frame));
frame1 = (my_custom_frame*) new (temp1) my_custom_frame();
次に、frame1 で copy_dframe_to_cf メソッドを呼び出して、my_custom_frame に整数を設定します。次に、frame1 を video_deque にプッシュします。この時点で、コード frame1 にブレーク ポイントを設定すると、すべての整数変数が適切に設定されます。
frame1->copy_dframe_to_cf(video_frames[0].get());
video_deque->push_back(frame1);
プロセス 2 では、共有メモリを開き、deque を見つけます。
boost::interprocess::managed_shared_memory segment(boost::interprocess::open_only, "MySharedMemory");
//Find the vector using the c-string name
VideoDeque* my_video_deque = segment.find<VideoDeque>("VideoDeque").first;
次に、my_video_deque から my_custom_frame を取得します。
typedef std::deque<my_custom_frame*> MyFrameQueue;
MyFrameQueue my_video_frames;
my_video_frames.push_back(my_video_deque->front());
my_custom_frame *pFrame;
pFrame = my_video_frames[0];
この時点で、pFrame の値を見ると、それらはすべて 0 に設定されています。pFrame が指すメモリ アドレスは、プロセス 1 で両端キューに配置したものと同じであるため、同じ正しいメモリ位置にアクセスしていると思いたいのですが、何らかの理由で値がリセットされています。どんな助けでも大歓迎です。