2009-09-02 7 views
1

Puis-je utiliser la mémoire partagée sous Windows pour disposer d'une zone mémoire commune pouvant être utilisée par plusieurs processus distincts?Mémoire partagée sous Windows accessible en lecture et en écriture par des processus distincts

Contexte:

une application unix Portage à Windows qui a: - un processus 'd'installation' qui crée un certain nombre de régions de mémoire partagée. - un ensemble d'autres processus (qui fonctionnent à des moments où le processus de configuration a déjà finis) qui suit (et parfois en écriture) des régions de mémoire qui ont été préparés par le procédé de configuration


I ont déjà expérimenté avec CreateFileMapping(INVALID_HANDLE_VALUE, ...)/OpenFileMapping mais la mémoire partagée semble être libérée dès que le processus de création se termine.

Dois-je créer des fichiers réels (c'est-à-dire sur le système de fichiers) et les ouvrir au lieu d'utiliser INVALID_HANDLE_VALUE?

Répondre

3

Windows ne prend pas en charge la création d'un objet de mappage de fichier global qui existe sans aucun processus de maintien poignées à elle, ce qui explique pourquoi votre utilisation de CreateFileMapping avec des sections anonymes ne fonctionnait pas. Toutefois, comme vous le suggérez, vous pouvez créer un fichier réel sur le disque et le mapper en utilisant CreateFileMapping si nécessaire, et les processus peuvent partager la mémoire qui est sauvegardée par le fichier disque. Vos processus devront juste savoir où chercher pour trouver le fichier de sauvegarde.

0

Boost a une bibliothèque qui peut être utilisée pour la mémoire partagée: Boost.Interprocess

Questions connexes