Pregunta

He escrito una clase de C ++ que necesito compartir una instancia de entre al menos dos procesos de Windows. ¿Cuáles son las diferentes maneras de hacer esto?

Inicialmente Miré en #pragma data_seg sólo para ser decepcionados cuando me di cuenta de que no va a trabajar en clases o con cualquier cosa que asigna en el montón.

La instancia de la clase debe ser accesible a través de una DLL porque, aplicaciones completas existentes ya usan este archivo DLL.

¿Fue útil?

Solución

Puede utilizar potencialmente archivos mapeados en memoria para compartir datos entre procesos. Si necesita llamar a las funciones de su objeto, se tendría que utilizar COM o algo similar, o se tendría que implementar su propio protocolo RPC.

Otros consejos

impulso :: entre procesos. Se necesita un poco de tiempo para acostumbrarse, pero funciona muy bien. He hecho las estructuras de datos relativamente complejos en la memoria compartida que funcionaron bien entre los procesos.

editar: funciona con archivos mapeados en memoria también. El punto es que usted puede utilizar los datos de forma estructurada; usted no tiene que tratar a los bloques de memoria (en archivos o memoria compartida) como datos en bruto simplemente que hay que leer con atención / escritura a dejar en un estado válido. Boost :: entre procesos se encarga de esa parte y se puede usar contenedores STL, como árboles, listas, etc.

Puede utilizar la colocación de nuevo para crear el objeto en una zona de memoria compartida. Siempre y cuando el objeto no utiliza punteros, que deberán ser llenados bien.

Es un POD o necesita ser capaz de compartir una única instancia a través de procesos? Ha considerado el uso del patrón Singleton (versión inicialización estática, por razones de seguridad hilo)? Usted tendrá que utilizar objetos mutex así para proteger escrituras concurrentes y otras cosas.

En Windows, puede utilizar COM también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top