не удается найти вектор в managed_shared_memory (boost; c ++)

Я использовал пример из документации Boost, но она не работает = (
это серверное приложение и в этом случае все в порядке

#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <cstring>
#include <cstdlib>
#include <string>

#include <iostream>

using namespace boost::interprocess;

typedef allocator<int,managed_shared_memory::segment_manager>  ShmemAllocator;
typedef vector<int, ShmemAllocator> MyVector;

int main(int argc, char *argv[])
{
struct shm_remove
{
shm_remove() { shared_memory_object::remove("MySharedMemory"); }
~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
} remover;

managed_shared_memory segment(create_only, "MySharedMemory", 65536);
const ShmemAllocator alloc_inst (segment.get_segment_manager());
MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
for (int i=0;i<100;i++) myvector->push_back(i);
MyVector *myanothervector = segment.find<MyVector>("MyVector").first;
std::cout<<"found\n";
for(int i=0;i<100;i++) std::cout<<(*myanothervector)[i];

char c;//pause
std::cin>>c;

return 0;
}

но в клиентском приложении я не могу найти вектор, моя программа зависла, когда я пытался найти вектор в managed_shared_memory (серверное приложение уже запущено и продолжает работать, когда я запускаю клиентское приложение)

//client app
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <string>
#include <cstdlib> //std::system

#include <iostream>

using namespace boost::interprocess;

typedef allocator<int,managed_shared_memory::segment_manager>  ShmemAllocator;

typedef vector<int, ShmemAllocator> MyVector;

int main(int argc, char *argv[])
{
managed_shared_memory segment(open_only, "MySharedMemory");
MyVector *somevector = segment.find<MyVector>("MyVector").first;// my program freezed here
std::cout<<"found\n";
for(int i=0;i<100;i++) std::cout<<(*somevector)[i];
segment.destroy<MyVector>("MyVector");
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector