multi_index容器我有這樣的結構:在共享內存
struct myData
{
unsigned long id;
int age;
int phone;
myData(){};
myData(unsigned long id_, int age_, int phone_)
:id(id_),age(age_),phone(phone_){}
~myData(){};
};
這multi_index容器:
typedef multi_index_container<
myData,
indexed_by<
random_access<>, // keep insertion order
ordered_non_unique< member<myData, int, &myData::age> >
>
> myDataContainerType;
typedef myDataContainerType::nth_index<1>::type myDataContainerType_by_Id;
myDataContainerType myDataContainer;
這個插入功能:
bool insert(unsigned long id, int age, int phone) {
myDataContainerType::iterator it;
bool success;
boost::mutex::scoped_lock scoped_lock(mutex); // LOCK
std::pair<myDataContainerType::iterator, bool> result = myDataContainer.push_back(myData(id, age, phone));
it = result.first;
success = result.second;
if (success)
return true;
else
return false;
}
,所以我想提出這個muti_index容器到shared memory
以使其可以從其他應用程序訪問。我看到this和that例子,但我不明白,allocator
東西都(爲什麼我需要一個char分配?做什麼樣的分配的,我需要在這裏等使用...)
有人可以給我解釋一下如何把這個容器共享內存?
感謝的確...
編輯:
好吧,我將我的這個代碼:
myDataContainerType *myDataContainer ;
void createInSharedMemory()
{
managed_shared_memory segment(create_only,"mySharedMemory", 65536);
myDataContainer = segment.construct<myDataContainerType>
("MyContainer") //Container's name in shared memory
(myDataContainerType::ctor_args_list()
, segment.get_allocator<myData>()); //Ctor parameters
}
,並嘗試插入數據這樣的:
bool insert(unsigned long id, int age, int phone) {
myDataContainerType::iterator it;
bool success;
boost::mutex::scoped_lock scoped_lock(mutex); // LOCK
std::pair<myDataContainerType::iterator, bool> result = myDataContainer->insert(MyData(id, age, phone));
it = result.first;
success = result.second;
if (success)
return true;
else
return false;
}
但我在插入行中得到這個錯誤:(在offset_ptr .hpp)
Unhandled exception at 0x000000013fa84748 in LDB_v1.exe: 0xC0000005: Access violation reading location 0x0000000001d200d0.
任何想法請???
你需要一個char分配器來分配'char'對象的連續區域。你知道,當你分配字符串時,你會怎麼做? (從樣本中很清楚)。請告訴我們實際的代碼和你卡住的地方。目前看起來你期待着我們做你的工作? – sehe
問題是我不明白,如果我有一個分配器,如在示例中的分配器,但因爲我沒有字符串,我想我也不需要該分配器。所以我認爲我必須像這個例子一樣來建立它。 http://www.boost.org/doc/libs/1_47_0/doc/html/interprocess/allocators_containers.html#interprocess.allocators_containers.additional_containers.multi_index。我怎樣才能從其他應用程序到達容器?對不起,我不希望你做這項工作,但我不知道該怎麼做?這是我第一次使用共享內存。 – user2955554