2017-06-07 3 views
0

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(&parameter_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

Antwort

0

Ich habe es ... es ist ein seltsames Problem, aber es ist in diesem Fall notwendig, den Ort zu definieren, wo die shared_memory gespeichert werden muss. In meinem Fall:

"

Verwandte Themen