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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top