簡體   English   中英

提升進程間向量,創建多個向量指針

[英]Boost interprocess vector, creating multiple vector pointers

我想使用以下代碼將共享矢量插入共享地圖:

managed_shared_memory segment(create_only ,"MySharedMemory" ,65536);

typedef allocator<int, managed_shared_memory::segment_manager> vecAllocator;
typedef vector<int, vecAllocator> vec;
typedef std::pair<int, vec* > ValueType;
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator;
typedef multimap<int, vec*, std::less<int>, ShmemAllocator> MyMap;

ShmemAllocator alloc_inst (segment.get_segment_manager());
vecAllocator vectorallocator (segment.get_segment_manager());


MyMap *mymap = segment.construct<MyMap>("MyMap")(std::less<int>(),alloc_inst);
vec *myvec = segment.construct<vec>("myvec")(vectorallocator);
vec *myvec1 = segment.construct<vec>("myvec1")(vectorallocator);

myvec->push_back(10);
myvec->push_back(9);
myvec->push_back(8);
myvec1->push_back(987);
myvec1->push_back(123);
myvec1->push_back(456);


for(int i = 0; i < 6; ++i){
    for(int j = 0; j<6; j++)
        mymap->insert(std::pair<int, vec*>(i, myvec));
}
for(int i = 0; i < 6; ++i){
    for(int j = 0; j<6; j++)
        mymap->insert(std::pair<int, vec*>(i, myvec1));
}

該代碼有效..但是我想做的是構造一個沒有名稱的向量。 那是做這樣的事情

vec *myvec = segment.construct<vec>(vectorallocator);
vec *myvec1 = segment.construct<vec>(vectorallocator);

因此,如果我將其放在一個循環中,則在每個循環中以不同的方式命名它們都沒有問題。 有辦法嗎? 還是至少有一種自動方法可以在每個循環中為它們命名不同?

因為我不需要向量的名稱,所以這就是我所做的。

unsigned int seconds;
srand ( time(NULL) );
seconds = rand() % 1000000;
std::stringstream buf;
buf << seconds;
vec *myvec = segment.construct<vec>((buf.str()).c_str())(vectorallocator);

我現在可以擁有很多vec *,而不必考慮名稱了.. :)

這只是一個簡單的答案。

好吧,我以前的答案是STUPID ..所以這是正確的答案我們必須使用匿名實例來獲取我想要的。 使用完成

vec *myvec = segment.construct<vec>(anonymous_instance)(vectorallocator);

在此處進行了說明http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/managed_memory_segments.html#interprocess.managed_memory_segments.managed_memory_segment_features.anonymous

它還說明了其他一些不錯的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM