使用Boost.Interprocess在共享内存中创建对象

时间:2013-11-05 00:32:32

标签: c++ boost shared-memory boost-interprocess

我试图学习如何在共享内存中创建一个对象,以便多个进程可以写入/读取共享队列。当进程写入队列时,它可以使用boost条件变量向其他进程发送信号。我对共享内存应用程序并不熟悉,所以请更正我的代码。

我的对象如下所示,

typedef boost::interprocess::vector < uint8_t > buffer_t;

struct QueueType
{
    boost::interprocess::interprocess_condition Signal;
    boost::interprocess::interprocess_mutex Mutex;
    boost::interprocess::deque < buffer_t > Queue;
};

我分配上述类对象的代码如下,

managed_shared_memory _shm_mem;
std::string _shm_name;
QueueType * _queue;

bool Start()
{
    bool result ( false );
    try 
    {
        _shm_mem = managed_shared_memory ( open_or_create, _shm_name.c_str(), 65536);   
        _queue = _shm_mem.find_or_construct<QueueType>("Queue")();
        if ( _queue != NULL ) 
        {
           result = true;
        }   
    }
    catch (boost::interprocess::interprocess_exception &e )
    {
        std::cout << e.what() << std::endl;
    }
    return result;
}

使用上面的代码我无法获得有效的_queue对象。

0 个答案:

没有答案