Някой има ли примерен код, показващ тръбопровода за сериализиране на std::string, изпращайки го през boost::interprocess::message_queue и връщайки го отново?
Как да предавате сложни обекти ( std::string ) през boost::interprocess::message queue
Отговори (2)
Трябва да сериализирате вашите данни, защото boost::interprocess::message_queue работи с байтови масиви. Ако всичките ви съобщения са низове, просто направете:
size_t const max_msg_size = 0x100;
boost::interprocess::message_queue q(..., max_msg_size);
// sending
std::string s(...);
q.send(s.data(), s.size(), 0);
// receiving
std::string s;
s.resize(max_msg_size);
size_t msg_size;
unsigned msg_prio;
q.receive(&s[0], s.size(), msg_size, msg_prio);
s.resize(msg_size);
person
Maxim Egorushkin
schedule
06.08.2010
Решение може да бъде да напишете функция, която има като вход обекта, който искате да изпратите (напр. вашия низ с променлив размер), и като изход контейнер от обекти с фиксиран размер.
Нещо като:
int Tokenize(std::vector<MessageToken>&, const Message&) const;
int Merge(Message&, const std::vector<MessageToken>&) const;
Тогава тези обекти с фиксиран размер могат да бъдат изпратени в/извлечени от message_queue.
Предимството в сравнение с решението на Maxim е, че не е необходимо да указвате параметър max_msg_size
.
person
Pietro
schedule
03.10.2011