Jump to content


Photo

Archivos de memoria compartida


  • Please log in to reply
5 replies to this topic

#1 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 01 August 2009 - 04:11 PM

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.

Attached Files


  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 01 August 2009 - 04:23 PM

Muchas gracias por todos estos interesantes aportes.

Saludos
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 02 August 2009 - 07:52 AM

Dado que se hicieron varias descargas del ejemplo y que después consideré que no estaba bastante bien explicada la forma de uso y que los ejecutables debían ejecutarse en determinado orden que no expliqué, he modificado un poco el ejemplo, no la clase TSharedMemory, que permanece igual.

En el primer mensaje está el enlace de descarga actualizado y alguna explicación mas.

Saludos.
  • 0

#4 felipe

felipe

    Advanced Member

  • Administrador
  • 3283 posts
  • LocationColombia

Posted 02 August 2009 - 11:52 AM

A medida que lo probemos saldrán las preguntas a la luz, muchas gracias por el aporte...


Saludos!
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 04 August 2009 - 05:29 AM

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.


  • 0

#6 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 posts
  • LocationLima-Peru

Posted 04 August 2009 - 07:14 AM

Muy bueno escafandre, :D
  • 0




IP.Board spam blocked by CleanTalk.