Boost message_queue:只有构造函数允许我配置它,没有其他成员函数可用

Boost message_queue: just the constructor lets me configure it, no other member functions available

本文关键字:其他 成员 函数 允许我 queue message Boost 构造函数 配置      更新时间:2023-10-16

这是一个经典的Boost message_queue示例:

#include <boost/interprocess/ipc/message_queue.hpp>
using namespace boost::interprocess;
struct Data { ... };
int main() {
    Data data1;
    message_queue::remove("message_queue");
    message_queue mq(create_only, "message_queue", 100, sizeof(Data));
    mq.send(&data1, sizeof(Data), 0);
}

现在我想把mq message_queue对象作为成员变量放入类中,具有该类对象的生命周期:

#include <boost/interprocess/ipc/message_queue.hpp>
using namespace boost::interprocess;
struct Data { ... };
class DataManager 
{
    message_queue mq;
public:
    DataManager() 
       : mq(create_only, "message_queue", 100, sizeof(Data))      // ok
    {
        mq.Open(create_only, "message_queue", 100, sizeof(Data));   // Open does not exist
    }
};

似乎我只能在成员初始化列表中初始化mq对象,因为message_queue不提供在稍后时间设置其参数的成员函数。

我错了吗?还有别的办法吗?

我希望能够,例如,让一个对象使用消息队列,其名称作为参数传递给它的一个成员函数。

谢谢。

这个怎么样:

class QueueManager
{
  boost::scoped_ptr<message_queue> mq;
  // ctor
  QueueManager(string msgqname) 
  {
      mq.reset(new message_queue(create_only, msgqname, 100, sizeof(Data));
  }
};

只是给你一个概念,至少一些参数可以传递给类构造函数。由于消息队列在底层使用共享内存,所以我认为大多数参数在构建后都不能更改。