boost Shared Memory



  • Hi,

    bei mir ist ein Problem mit dem Shared memory bei boost aufgetreten.
    Leider kann ich den code hier nicht so ganz posten...

    Aber hintergrund ist Folgender:
    1.) In einer DLL gibt es den SharedMemoryAdmin.
    Der C-Tor öffnet oder Erzeugt shared memory.
    Der Destruktor zerstört ihn wieder.
    Der SharedMemoryAdmin ist eine globale Variable Also die instanz).
    Das shared_memory_object erzeuge ich mit new, und halte den Pointer als Membervariable im SharedMemoryAdmin

    shared_memory_object shm_obj
       (open_or_create               //open or create
       ,"shared_memory"              //name
       ,read_write                    
       );
    

    Mit der

    mapped_region region
       ( shm                      //Memory-mappable object
       , read_write               //Access mode
       , ShmSize/2                //Offset from the beginning of shm
       , ShmSize-ShmSize/2        //Length of the region
       );
    

    mache ich das gleich.
    Den Pointer zum shared memory halte ich dann auch als Membervariable.

    Das Gegenstück des shared memory wird dann in einer exe datei erzeugt.
    Um genau zu sein im SetUp von CPPTest (Unittest Framework). Zerstört wird es im TearDown. (Beide funktionen werden aufgerufen, und dazwischen der Testfall).
    Leider funktioniert das nicht.
    Wenn ich genau den selben code zum erzeugen des shared memory im testcase einbaue, dann funktionierts.... aber nicht im SetUp und TearDown....
    Ich habe schon an eine Race condition gedacht, aber eigentlich ist es egal wer
    zuerst das shared memory öffnet denke ich...

    Lange Rede kurzer Sinn 🙂

    1.) Darf ich in boost die beiden Objekte "shared_memory_object und mapped_region"
    mit new erzeugen ??
    2.) Darf ich das im Construktor einer globalen Variable in einer DLL machen ??
    3.) Wenn die Daten nicht übertragen werden, gibt es irgendwo eine fehlerablage wo ich nachschauen kann zum Beispiel "GetLastError" oder so ???

    Würd mich über Tipps freuen.
    Sorry für die schlechte beschreibung.
    Grüße


Anmelden zum Antworten