Ich verwende shared_memory und message_queue aus der Boost-Bibliothek.Boost-Bibliothek Fehler bei der Verwendung von Message_queue und shared_memory
Eine Bildbearbeitungsanwendung stellt Parameter und 3D-Punkte in einem shared_memory bereit und eine GUI-Anwendung extrahiert die Daten aus dem Speicher. Die Synchronisation funktioniert mit Message_Queue's. Es funktioniert gut in einem kurzen Lauf, aber nach einer längeren Zeit treten fatale Fehler auf und auch ein Neustart hilft nicht. Danach ist es nicht möglich, einen neuen shared_memory-Abschnitt oder eine message_queue zu erstellen. Das Erstellen einer neuen Nachrichtenwarteschlange schlägt mit 'BOOST_ASSERT (ptr! = 0)' fehl. Ein Teil des Init-Teils sieht aus wie der Code (wird auch nicht mehr in Betrieb):
//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)));
Ein Teil der App-Bildverarbeitung die Parameter des Auslesens sieht aus wie der folgenden Code:
//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) {
}
Was könnte das Problem sein? Hat jemand ähnliche Erfahrungen? Ich würde mich freuen, Hinweise auf mögliche Lösungen zu bekommen.
Mit freundlichen Grüßen, T