我正在使用来自boost库的shared_memory和message_queue。
图像处理应用程序在shared_memory中提供参数和3D点,gui-application从内存中抓取数据。同步与message_queue一起使用。 它在短期内运行良好,但在更长的perdiod发生致命错误后,重启也无济于事。 之后,无法创建新的shared_memory部分或message_queue。使用' BOOST_ASSERT(ptr!= 0)'创建新的message_queue失败。 init部分的一部分看起来像下面的代码(也不再起作用):
//initializing default values - VoxelGrid_X
message_queue::remove("param_VX");
message_queue mq_VX(create_only, "param_VX", 1, sizeof(double));
mq_VX.try_send(¶meter_VX, sizeof(parameter_VX), 0);
ui->lineEdit_VX->setPlaceholderText(QString::number(convert_m_mm(parameter_VX)));
在图像处理应用程序中读取参数的一部分看起来像下面的代码:
//VoxelGrid: X
try {
unsigned int priority_VX = NULL;
message_queue::size_type recv_size_VX = NULL;
message_queue mq_VX(open_only, "param_VX");
mq_VX.try_receive(&leafSizeX, sizeof(leafSizeX), recv_size_VX, priority_VX);
}
catch (interprocess_exception &ex) {
}
可能是什么问题?有没有人有类似的经历?我很乐意得到有关可能解决方案的提示。
祝你好运, Ť
答案 0 :(得分:0)
我明白了......这是一个奇怪的问题,但在这种情况下,有必要定义必须存储shared_memory的地方。 就我而言:
#define BOOST_INTERPROCESS_SHARED_DIR_PATH "C:/Shared_Memory
“