Question

J'ai écrit une classe C ++ que je dois partager une instance entre au moins deux processus fenêtres. Quelles sont les différentes façons de le faire?

Dans un premier temps j'ai regardé dans #pragma data_seg seulement être déçu quand je me suis aperçu que cela ne fonctionnera pas sur les classes ou avec tout ce qui affecte sur le tas.

L'instance de la classe doit être accessible via une dll, car existants, des applications complètes utilisent déjà cette dll.

Était-ce utile?

La solution

Vous pouvez utiliser potentiellement fichiers mappés en mémoire pour partager des données entre les processus. Si vous avez besoin d'appeler des fonctions sur votre objet, vous auriez à utiliser COM ou quelque chose de similaire, ou vous auriez à mettre en œuvre votre propre protocole RPC.

Autres conseils

Regardez dans Boost :: interprocessus. Il faut un peu de temps pour s'y habituer, mais cela fonctionne très bien. J'ai fait des structures de données relativement complexes en mémoire partagée qui a bien fonctionné entre les processus.

edit: il fonctionne avec des fichiers mappés en mémoire aussi. Le point est que vous pouvez utiliser les données de manière structurée; vous ne devez pas traiter les blocs de mémoire (dans les fichiers ou la mémoire partagée) que uniquement les données que vous devez lire attentivement / écriture à laisser dans un état valide. Boost :: interprocessus prend soin de cette partie et vous pouvez utiliser des conteneurs STL comme les arbres, listes, etc.

Vous pouvez utiliser le placement nouveau pour créer l'objet dans une zone de mémoire partagée. Tant que l'objet n'utilise pas de pointeurs, qui Sould bien.

Est-ce un POD ou avez-vous besoin de pouvoir partager une seule instance à travers les processus? Avez-vous envisagé d'utiliser le modèle Singleton (version d'initialisation statique, pour des raisons de sécurité de fil)? Vous aurez besoin d'utiliser Mutex et pour protéger les écritures concurrentes et d'autres choses.

Sous Windows, vous pouvez utiliser COM ainsi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top