ошибка выброса очереди сообщений boost :: interprocess - PullRequest
0 голосов
/ 05 ноября 2018

Я использую межпроцессную очередь сообщений Boost в Windows, однако я столкнулся с проблемой, что будет выдано сообщение об ошибке, когда max_msg_size не равен buffer_size, часть моего кода выглядит следующим образом:

//process A
message_queue::remove(name);
m_MQ = std::make_unique<message_queue>(create_only, name,2000,300);
m_MQ->try_send(buffer, buffer_size, 0);

//process B
m_MQ = std::make_unique<message_queue>(open_only, name);
m_MQ->try_receive(buffer, buffer_size, recvd_size, priority);

В этом случае, если buffer_size не равно 300, он выдаст boost::interprocess_exception::library_error, и я больше не могу передавать буфер переменной длины. Большое спасибо.

1 Ответ

0 голосов
/ 05 ноября 2018

Когда вы заявляете ...

если параметр buffer_size не равен 300, он выдаст повышение :: interprocess_exception :: library_error

Вы действительно имеете в виду «не равно» или исключение возникает только тогда, когда размер буфера меньше указанного максимального размера сообщения?

Если исключение возникает только в том случае, если buffer_size < 300, то я думаю, что этого следовало ожидать - библиотека не может надежно получить сообщение, которое может быть до 300 char с, в буфер меньше 300 char. с размером.

Вместо этого вы должны использовать boost::interprocess::message_queue::get_max_msg_size, чтобы создать приемный буфер подходящего размера ...

m_MQ = std::make_unique<message_queue>(open_only, name);
std::vector<char> buffer(m_MQ->get_max_msg_size());
m_MQ->try_receive(buffer.data(), buffer.size(), recvd_size, priority);
...