FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Objetos superglobales
¡Hola a todos!
En los últimos días dediqué algunos ratos libres a escribir esta unidad de código. Es algo que programé hace varios años como parte de una biblioteca que contiene muchas otras cosas, pero decidí aislar y afinar este material para compartirlo con todos los colegas Delphi de manera más directa. La idea básica es poder crearnos clases derivadas de una como TSuperGlobalObject en lugar de TObject, cuando queramos tener una instancia de objeto que pueda ser compartida entre procesos de manera natural y transparente. Con esto, un programa Delphi en ejecución puede instanciar un objeto de clase definida por el programador, de la manera usual:
Y luego otro programa Delphi en ejecución puede hacer lo mismo:
En ese momento los dos procesos estarán compartiendo el mismo objeto, y podrán acceder a sus campos y métodos como lo harían con cualquier objeto normal. Los cambios que un programa hace sobre el objeto son automáticamente visibles para el otro programa. Esto resulta en una manera muy práctica de compartir información entre dos aplicaciones que se ejecutan en la misma máquina. Pueden hacérsele muchas mejoras a esta unidad, como adaptarle semáforos de acceso para controlar escrituras simultáneas o modificar algunas secciones de su código para hacerla segura para hilos (thread safe), pero la base ya está. Al final de este mensaje aparece un enlace para descargarla. He aquí su código (se aceptan críticas constructivas ):
Espero que a alguien le sea de utilidad. Ojalá todo mi trabajo consistiese en hacer cosas como esta. Algún día no muy lejano... Un abrazo superglobal. Al González. Última edición por Al González fecha: 12-02-2008 a las 07:53:09. |
#2
|
||||
|
||||
Excelente
Excelente Al, pinta muy bueno . Cuando vuelva a casa del trabajo lo probare.
__________________
[Crandel] |
#3
|
||||
|
||||
Hola,
Tiene buena pinta, ¿no? No lo he probado (estoy perezoso) pero tiene buena pinta, me parece. Gracias Al. |
#4
|
||||
|
||||
Hola Al,
Cuanto vi el título sospeché un poco... me llamó la atención pues mi loco cerebro me decía, sin haber leído "¿Pero que no eso se consigue empleando un singleton?" Fue mi sorpresa que al leer el hilo no se trataba de eso. Te debo una disculpa por haber dudado. Mil disculpas. Algo de esa "teoria" me suena, desafortunadamente, a chino. Pues nunca he estado probando las API de mapeo (al menos que yo recuerde). Pero tu bien documentada unidad sirve de ejemplo para comprender mejor los conceptos. Tiene una muy buena pinta. Tengo que probarla. No me puedo quedar sin las ganas de probarla. Saludos, |
#5
|
||||
|
||||
Interesante idea Al... en mas de una ocasión se ha planteado la manera de compartir información entre dos procesos que se ejecutan en la misma máquina. Esta solución "nativa" de delphi me parece muy interesante. Ahora estoy lejos de mi máquina habitual de trabajo, pero haré algunas pruebas cuando esté de vuelta.
Creo que es básico el soporte multi-hilos. Se que ya lo has planteado, pero pido permiso para echar mano en esa línea, a ver si llego a algo bueno. Un saludo.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
||||
|
||||
Decirte que funciona de maravillas
Todavia la parte del mapeo no me queda muy claro, lo voy a tener que seguir analizando y buscando un poco mas de info, pero me gusto Gracias
__________________
[Crandel] |
#7
|
|||
|
|||
Cita:
No tendrías algun ejemplo hecho que te funcione de como utilizarla a ver si me consigo aclarar. Llevo unas cuantas horas con la Unit y me SUPERA. gracias. |
#8
|
||||
|
||||
Hola avmm2004, aca te paso el ejemplo que escribi en aquel momento que lo probe, es muuuuy sencillo, simplemente escribe una variable en la memoria y la lee.
El programa esta en turbo delphi, pero no debería haber problema de compilarlo en otra versión. Simplemente compila el programa y luego ejecuta varias instancias de mismo. Veras que puedes modificar el valor de la variable desde un programa y luego leerlo desde otro de forma transparente.
__________________
[Crandel] |
#9
|
||||
|
||||
Bueno ... me dio un poco de verguenza mandartelo asi no mas, todoqueteado como niño de primaria al código de nuestro amigo Al.
Asi que aca te dejo la versión limpia y prolija. Donde lo único que debes hacer es modificar la clase MySuperGlobalClass con lo que quieras y no tocar la clase de Al. .
__________________
[Crandel] |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Objetos Perdidos. | marcoszorrilla | La Taberna | 8 | 04-05-2007 19:50:23 |
copia de objetos | emeceuy | OOP | 3 | 11-12-2006 03:59:55 |
Prioridades de Objetos | JerS | Varios | 2 | 10-11-2005 13:53:10 |
Una lista de Objetos en .NET | bustio | .NET | 1 | 11-10-2004 15:23:08 |
Objetos | jfontane | Varios | 1 | 04-07-2003 15:39:04 |
|