I metodi di istanze di classe condivisione tra i processi
Domanda
ho scritto una classe C ++ che ho bisogno di condividere un'istanza di tra almeno due processi di Windows. Quali sono i diversi modi per fare questo?
Inizialmente ho guardato in #pragma data_seg solo per essere delusi quando ho capito che non funzionerà sulle classi o con qualsiasi cosa che alloca sul mucchio.
L'istanza della classe deve essere accessibile tramite una DLL a causa esistenti, applicazioni complete già utilizzano questa dll.
Soluzione
È possibile utilizzare potenzialmente file mappati in memoria per condividere dati tra processi. Se è necessario chiamare le funzioni sul vostro oggetto, dovreste usare COM o qualcosa di simile, o che avrebbe dovuto implementare il proprio protocollo RPC.
Altri suggerimenti
Se vuoi in boost :: interprocesso . Ci vuole un po 'di tempo per abituarsi, ma funziona molto bene. Ho fatto le strutture di dati relativamente complesse in memoria condivisa che hanno funzionato bene tra i processi.
modifica: funziona con i file mappati in memoria troppo. Il punto è che si può utilizzare i dati in modo strutturato; non c'è bisogno di trattare i blocchi di memoria (in file o la memoria condivisa) come dati grezzi solo che dovete lettura / scrittura con attenzione a lasciare in uno stato valido. Boost :: interprocesso si prende cura di quella parte ed è possibile utilizzare contenitori STL come alberi, liste, ecc.
È possibile utilizzare nuova collocazione per creare l'oggetto in una zona di memoria condivisa. Fino a quando l'oggetto non utilizza i puntatori, che sould bene.
Si tratta di un POD o avete bisogno di essere in grado di condividere una singola istanza attraverso i processi? Hai pensato di usare il pattern Singleton (versione di inizializzazione statico, per motivi di sicurezza filo)? Sarà necessario utilizzare mutex nonché per proteggere le scritture contemporanee e roba.
In Windows, è possibile utilizzare COM pure.