Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Compartir "objetos" entre varias instancias (https://www.clubdelphi.com/foros/showthread.php?t=29206)

mafebresv 16-01-2006 08:38:26

Compartir "objetos" entre varias instancias
 
Hola

Estoy desarrollando una aplicacion que hace uso de un componente para enviar y recibir data
a traves del puerto serial. Para manejar el envio de comandos empleo un objeto TStringList
donde almaceno los comandos que necesito y un timer chequea cada X milisegundos si hay algun
comando en espera. Si hay un comando, lo envia y lo borra de la lista. Hasta aca no hay
ningun problema.

Lo que necesito ahora es poder iniciar X instancias del programa, pero como sabemos,
el puerto serial es de uso exclusivo y solo podria ser usado por la primera instancia.
Solucion? Compartir de alguna forma el componente encargado del puerto serial y el objeto
TStringList para que sean accesibles por todas las instancias del programa.

¿Es esto posible? ¿Cual seria la mejor manera de hacerlo?
DLL? BPL? COM? Memory mapped files?


Saludos

--
Miguel Febres
Psiconalista de Sistemas
Cel. 9797-1346
Mail: mafebresv@q-protex.com
www.q-protex.com

dec 16-01-2006 08:52:05

Hola,

Solucióname una duda, por favor. Cuando dices que el puerto "Serial" es de uso exclusivo, ¿a qué te refieres exactamente? ¿A que una aplicación accede de forma exclusiva al puerto "Serial"? Si esto es así, ¿no son varias instancias de una aplicación, a todos los efectos, aplicaciones distintas, procesos distintos?

Pero, como preguntas lo que preguntas, ¿acaso probaste ya con varias instancias de tu programa y tuviste problemas para trabajar con ellas? Es de suponer que sí, entonces, ¿porqué crees que el problema puede estar en la "exclusividad" del puerto "Serial"? ¿Te aparece un error que te dice algo así o qué?

Bueno. He comenzado pidiéndote por favor que me solucionaras una duda pero ya van más de una y más de dos. Me disculpo. ;)

mafebresv 16-01-2006 16:42:26

Hola dec

"Solucióname una duda, por favor. Cuando dices que el puerto "Serial" es de uso exclusivo, ¿a qué te refieres exactamente? ¿A que una aplicación accede de forma exclusiva al puerto "Serial"? Si esto es así, ¿no son varias instancias de una aplicación, a todos los efectos, aplicaciones distintas, procesos distintos?"

Asi es. Solo una aplicación puede abrir el puerto serial, despues de eso, cualquier aplicación (o instancia) que desee abrirla no podrá y saltará un error. (puerto serial ya abierto)


"Pero, como preguntas lo que preguntas, ¿acaso probaste ya con varias instancias de tu programa y tuviste problemas para trabajar con ellas? Es de suponer que sí, entonces, ¿porqué crees que el problema puede estar en la "exclusividad" del puerto "Serial"? ¿Te aparece un error que te dice algo así o qué?"

Como comenté anteriormente, solo la primera instancia de la aplicación puede abrir el puerto serial (obviamente si no hay alguna otra aplicación usandolo) y hasta aca no hay problemas. El problema es que es necesario que la aplicación pueda ser iniciada 2,3 o mas veces y todas esas instancias puedan usar el puerto serial. Entonces ahi viene el problema...
La solución sería que la primera instancia busque si ha sido cargada, digamos, una dll que contiene el componente que se encarga de la comunicación serial y un TStringList. Si está cargada la usa y tiene acceso a esos 2 objetos y si no está cargada la carga en memoria para que pueda ser usado por las demás instancias. Mi duda es, si esto es posible hacerlo...

"Bueno. He comenzado pidiéndote por favor que me solucionaras una duda pero ya van más de una y más de dos. Me disculpo."

No tienes que disculparte, mas bien gracias por interesarte.

Saludos

jachguate 16-01-2006 20:48:01

Por que no creas una sola aplicación (por ejemplo un servidor com o un servidor indy) que se conecte al puerto serial, y luego todas las instancias de tu programa se conectarán a este "servidor serial" para realizar las operaciones.

Así, lo único que faltaría es serializar en este servidor las operaciones que llegan por los diferentes clientes de manera que solo haya una línea para leer y/o escribir datos al puerto.

Saludos.

mafebresv 16-01-2006 23:38:23

Ingeniosa idea jachguate

No se me había ocurrido esa solución.
Voy a implementarlo usando TIdUDPServer y TIdUDPClient

Ya les contaré como me fue.


La franja horaria es GMT +2. Ahora son las 08:05:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi