![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola richy08,
En algún proyecto he realizado lo mismo que quieres hacer, es decir, un servidor multihilo que genera una batería de conexiones (una por hilo) de tan forma que cada hilo pueda ejecutar una serie de sentencias sql directa y simultaneamente. Puede funcionar perfectamente. Al leer lo que comentas, me surge una duda. Entiendo que lo que estás programando es un servidor TCP y que al recibir una conexión entrante (de un cliente) se atiende por un hilo en el servidor. ¿Por qué quieres generar una conexión por hilo en TCPServer? ¿para ganar mayor velocidad en la ejecución de sentencias? ¿agilizar la concurrencia en el servidor? Te lo comento porque también puedes crear un procedimiento en el TCPServer que se encargue de la conexión y de las sentencias SQL y llamarlo con el método synchronize del hilo. Básicamente esto lo que hace es acceder de modo controlado a la VCL y así evitas los problemas de acceso a componentes, por parte de lo hilos. Un saludo. |
|
#2
|
||||
|
||||
|
Cita:
por hilo es por que lo que he estando leyendo y comentarios de los compañeros que los querys no son hilo seguro es por esa la razon, creo que es esa la forma en que lo hice pero valla lo he estado testeando y al parecer funciona pero he tenido erorres de memoria en mi maqina por lo cual no estoy tan seguro de que tambien programado este , estos son los fragmnetos de codigo donde ejecuto las peticiones, te agradeceria si me pudieras orientar y en le caso de que vieras errores de logica me lo hicieras saber mil gracias por tu tiempo//cliente
//server
|
|
#3
|
|||
|
|||
|
Hola richy08,
A simple vista, creo, que los errores de memoria te vienen dado porque no estás destruyendo los querys que creas. Prueba a destruirlos cuando ya no los necesites. Un saludo. |
|
#4
|
||||
|
||||
|
gracias manuc la razon por lo que no los destruyo es por que no se con certeza si el hilo espera a que termine una peticion para empezar a ejecutar la otra, o si crea diferentes instancias de la funcion donde los crea me podrias iluminar saludos.
|
|
#5
|
|||
|
|||
|
Hola richy08,
Dentro de cada hilo, la ejecución es lineal. Es decir, cuando se conecta el tcpClient, el tcpServer Crear un hilo que atenderá la actividad de esa conexión y la ejecución del código programado para ese hilo se hará de forma lineal. Si, mientras un hilo ejecuta su código, entra otra conexión, se generará un hilo paralelo y se ejecutaran ambos al mismo tiempo. Gracias a esto, el TCPServer es multihilo y cada conexión se ejecuta de forma independiente, salvo en los puntos donde se utilice "synchronize". Sabiendo esto, puedes hacer dos cosas: 1.- Crear tus componentes en el evento onConnect del tcpServer. Es decir, por cada hilo que se crea en el tcpServer, creas los componentes correspondientes. Para este caso, deberías destruir los componentes cuando no los necesites, es decir, cuando se destruye el hilo. Esto ocurre en el evento onDisconnect del tcpServer. 2.- Crear tus componentes en el evento onExecute del tcpServer. Es decir, cada vez que un hilo tiene actividad, creas los componentes que necesites. Igualmente, cuando ya no necesites estos componentes, los debes destruir. Esto es justo al final del evento onExecute del tcpServer. En ambos casos, debes relacionar de alguna forma cada componente que creas con el hilo correspondiente, de tal forma que cuando un hilo finaliza su ejecución sepas qué componentes has de destruir. Otra cosa que te recomiendo, es que incluyas un try-except en tu evento onExecute, englobando todo el código, para que puedas controlar mejor la destrucción de los componentes que creas y no se te quede ninguno cargado en memoria. Espero haberte ayudado de alguna forma. Si tienes más dudas, pregunta sin problemas. un saludo. |
|
#6
|
||||
|
||||
|
Cita:
saludos |
|
#7
|
|||
|
|||
|
Hola Richy08,
Pues sí, alguna te puedo dar. Este código puede ser un poco más complicado de seguir al principio, pero creo que el más cómo, una vez lo tengas claro. 1.- Te Creas una nueva clase, para manejar tus componentes:
Cambia el tipo de componetes que quieras crear. 2.- Al recibir la conexión en el tcpServer Creamos los componentes:
3.- ¿Cómo usarlos?
4.- Como destruirlos:
Básicamente, lo que se haces es "recordar" la dirección de memoria donde están localizados los componentes, utilizando para ello un "puntero" que tiene cada conexión (.data). Lo he hecho de cabeza y sin compilarlo. Puede ser que me haya equivocado en algo, pero básicamente lo puedes hacer así. Si encuentra alguna duda, consulta sin problemas. Un saludo. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Como instalar los componenetes de la Norma 19 | diego11 | Varios | 3 | 17-10-2007 12:08:44 |
| componenetes en un TTabControl | lucasarts_18 | OOP | 2 | 27-09-2005 23:44:43 |
| instalar nuevos componenetes | aranel | OOP | 6 | 02-08-2005 09:25:33 |
| Multiple Hilos con Indy en Delphi 6 | cancerbero | Varios | 4 | 12-06-2004 19:01:21 |
| Componenetes para envio y recepcion de mensajes en la red | enrique800 | OOP | 3 | 29-01-2004 04:31:41 |
|