无法在共享内存段中找到向量

时间:2016-04-07 05:38:52

标签: c++ boost boost-interprocess

我尝试在同一个上下文中运行的两个Windows进程之间共享一个向量(作为用户进程,或者两者都作为服务)。我经过的official example实际上对我来说很合适。

唯一的区别是我使用了我自己的struct类型的向量而不是int的向量:

struct MyStatus
{
    MyStatus() : lastSeen(0) {}

    char field1[255];
    char field2[41];
    __int64 lastSeen;

    friend bool operator< (const MyStatus& lhs, const MyStatus& rhs)
    {
        return stricmp(lhs.field1, rhs.field1);
    }
    friend bool operator> (const MyStatus& lhs, const MyStatus& rhs)
    {
        return stricmp(rhs.field1, lhs.field1);
    }
};

同样,当创建共享内存的进程调用子进程时,这在样本中正常工作。但是,现在我有2个不同的流程,因为&#34;客户端&#34;它不再起作用了。无法找到矢量。

来电者这样做:

typedef boost::interprocess::allocator<MyStatus, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
typedef boost::interprocess::vector<MyStatus, ShmemAllocator> MyStatusVector;

shared_memory_object::remove("mysharedmemory");
managed_shared_memory segment(create_only, "mysharedmemory", 64 * sizeof(MyStatus));
const ShmemAllocator alloc_inst(segment.get_segment_manager());

 // ptrMyStatus_ is a member of a class
 // MyStatusVector* ptrMyStatus_
 ptrMyStatus_ = segment.construct<MyStatusVector>("mysharedvector"(alloc_inst);

构造向量后,我在此过程中成功填充了它。

当我尝试在另一个过程中查找并迭代向量时,会出现问题。我可以毫无问题地打开共享内存段,但.find()始终返回NULL:

    managed_shared_memory segment(open_read_only, "mysharedmemory");

    MyStatusVector *myvector = segment.find<MyStatusVector>("mysharedvector").first;
    // myvector will always be NULL

另一个问题是,当我使用&#34; open_only&#34;打开客户端中的共享内存段时,客户端进程在尝试查找向量时会无限期挂起。

这是我第一次涉足进程间沟通,所以我并没有完全体验过。我不明白它为什么找到共享内存,而不是共享内存中的向量。然而,它在样本中起作用。

很明显,我似乎错过了一些实质性的东西,我只是不知道是什么。

0 个答案:

没有答案