Objekt im Shared Memory
-
Hallo Forum,
habe eine Frage auf die ich im Netz keine Antwort bekomme:Ich habe eine DLL in der eine Hauptklasse implementiert ist (als Singleton, damit sie nur einmal instanziiert werden kann). Ich möchte nun, daß das einzige Objekt, das ich damit erstelle, Prozessübergreifend zur Verfügung steht, damit es parallel aus mehreren Windows-Prozessen genutzt werden kann.
Im WWW findet man 1000 Beispiele, wie man einfache Variablen sharen kann (File Mapping, pragma-Anweisungen usw.), leider keine Lösung für mein Problem.
Das ganze ist für Win32 und VS C++ gedacht.
Für Anregungen bin ich sehr dankbar.
-
Man kann keine Klassen sharen, denn deren Zeiger würden ja nur in einem Adresseraum gültig sein. Außer die Klasse ist ein POD und dann hast Du ja schon 1000 Beispiele im Netz gefunden...
-
Martin Richter schrieb:
Man kann keine Klassen sharen, denn deren Zeiger würden ja nur in einem Adresseraum gültig sein.
Bei "normalen" Klassen stimmt das. Daher suche ich eine Möglichkeit das Objekt in einem shared Memory zu erstellen und dann aus verschiedenen Prozessen (deren Zeiger im eigenen Adressraum liegen jedoch auf den shared Memory zeigen oder irgendwie mit ihm verknüpft sind) darauf zuzugreifen.
-
Was genau willst du jetzt wissen?
Du musst halt alles "zu Fuss" programmieren, da die Adressen im Shared Memory Bereich für jeden Prozess anders sein können, da neuen Speicher anzufordern sehr schwierig ist etc.Mit "File Mapping" hast du die einzig brauchbare Möglichkeit unter Windows Shared Memory (mit "dynamischer" Grösse) zu bekommen eh schon gefunden, was willst du jetzt noch wissen?
Wenn du für dein Singleton nur ein paar Integers brauchst ist alles kein Problem, dann nimmst du einfach #pragma data_seg. Wenn du dynamisch Daten anlegen/löschen musst wird's schwieriger.
Den einzigen Tip den ich dir geben kann: guck dir die Boost "shmem" Library an. Wie gut die ist, und ob du sich brauchen können wirst kann ich nicht sagen, ich weiss nur dass die inetwa hinkommen könnte.