获取提升的名称 message_queue
Get the name of a boost message_queue
当我创建一个提升消息队列时,在构造函数中我传递了名称:
using boost::interprocess;
//Create a message_queue.
message_queue mq
(create_only //only create
,"message_queue" //name
,100 //max message number
,sizeof(int) //max message size
);
这个名称也用在 remove 方法中,从系统中删除队列:
message_queue::remove("message_queue");
我的问题是:如果我只有消息队列对象,如何从中获取队列的名称?
没有文档化的接口。
甚至在构造时接收名称的 shmem 对象实现成员 m_shmem
也是私有的,因此创建子类无助于访问它。
此外,看起来最有前途的成员似乎没有有用的价值(至少在我的 POSIX 系统上):
bip::message_queue::m_shmem.get_device().get_mapping_handle().handle
反映-1 的值
bip::message_queue::m_shmem.get_device().get_name()
反映空串
我建议简单地创建您自己的类型来管理您不想重复的信息(这是个好主意,IYAM):
#include <boost/interprocess/ipc/message_queue.hpp>
namespace bip = boost::interprocess;
struct named_message_queue : bip::message_queue {
template <typename Mode, typename... Args>
explicit named_message_queue(Mode mode, const char *name, Args... args)
: bip::message_queue(mode, name, args...), _name(name) {}
std::string name() const { return _name; }
private:
std::string _name;
};
#include <iostream>
int main() {
named_message_queue mq(bip::create_only, "message_queue", 100, sizeof(int));
std::cout << "Name: " << mq.name() << "\n";
mq.remove(mq.name().c_str());
}
版画
Name: message_queue
¹ Coliru 不支持共享内存
当我创建一个提升消息队列时,在构造函数中我传递了名称:
using boost::interprocess;
//Create a message_queue.
message_queue mq
(create_only //only create
,"message_queue" //name
,100 //max message number
,sizeof(int) //max message size
);
这个名称也用在 remove 方法中,从系统中删除队列:
message_queue::remove("message_queue");
我的问题是:如果我只有消息队列对象,如何从中获取队列的名称?
没有文档化的接口。
甚至在构造时接收名称的 shmem 对象实现成员 m_shmem
也是私有的,因此创建子类无助于访问它。
此外,看起来最有前途的成员似乎没有有用的价值(至少在我的 POSIX 系统上):
bip::message_queue::m_shmem.get_device().get_mapping_handle().handle
反映-1 的值
bip::message_queue::m_shmem.get_device().get_name()
反映空串
我建议简单地创建您自己的类型来管理您不想重复的信息(这是个好主意,IYAM):
#include <boost/interprocess/ipc/message_queue.hpp>
namespace bip = boost::interprocess;
struct named_message_queue : bip::message_queue {
template <typename Mode, typename... Args>
explicit named_message_queue(Mode mode, const char *name, Args... args)
: bip::message_queue(mode, name, args...), _name(name) {}
std::string name() const { return _name; }
private:
std::string _name;
};
#include <iostream>
int main() {
named_message_queue mq(bip::create_only, "message_queue", 100, sizeof(int));
std::cout << "Name: " << mq.name() << "\n";
mq.remove(mq.name().c_str());
}
版画
Name: message_queue
¹ Coliru 不支持共享内存