Una pregunta sobre este tema me hizo recordar un código que escribí con este propósito. Se trata de una clase que sirve para crear archivos de memoria compartida tanto para el servidor como para el cliente. Se basa en las conocidas APIs CreateFileMapping, OpenFileMapping y MapViewOfFile.
Mediante este sistema podemos conseguir compartir un buffer o espacio de memoria entre dos o mas aplicaciones al mismo tiempo. La utilidad de esta técnica depende de la imaginación de cada desarrollador. La primera idea es la comunicación entre aplicaciones y compartir datos a estructuras mas o menos complejas. En este caso se debe tener presente que no deben compartirse estructuras o tipos que usen punteros o buffers, pues sus contenidos no serán compartidos y obtendremos un error de violación de acceso.
He actualizado los ejecutables del ejemplo para facilitar el entendimiento, y el uso, al mismo tiempo los he completado de forma mas ortodoxa. Al ejecutar Prueba_Shared_Memory.exe este se encarga de ejecutar después el cliente, Project2.exe. El orden de ejecución debe ser así pues el primero crea el archivo de memoria compartida mientras que el segundo se limita a abrirlo. El resto es pura intuición.
El segundo ejemplo muestra el uso de la clase TSharedMemory para realizar una comunicación un poco mas compleja bidireccional y con actualización del tamaño del buffer de memoria compartida. Aquí tenéis un poco mas de información.
Subo la clase, los ejemplos de uso y los ejecutables compilados.
Espero que les sirva.
Edito para arreglar corrupción del texto y de los archivos subidos.
Saludos.
Archivos de memoria compartida
#1
Escrito 01 agosto 2009 - 04:11
#2
Escrito 01 agosto 2009 - 04:23
Saludos
#3
Escrito 02 agosto 2009 - 07:52
En el primer mensaje está el enlace de descarga actualizado y alguna explicación mas.
Saludos.
#4
Escrito 02 agosto 2009 - 11:52
Saludos!
#5
Escrito 04 agosto 2009 - 05:29
Ilustrando un poco mas el tema, complico un poco mas el ejemplo.
Ahora ninguna de las dos aplicaciones implicadas es realmente el servidor o el cliente. Cada una crea un nuevo archivo de memoria compartida con cada envío. De esta manera podemos ajustar el tamaño del buffer de intercambio con cada envío de información. En este caso, además, se envía una estructura un poco mas compleja. El resultado es un par de aplicaciones que se comportan como una especie de chat.
La clase TShared Memory no ha sido modificada, sólo los ejemplos.
El enlace de descarga está en el primer post.
Saludos.
#6
Escrito 04 agosto 2009 - 07:14