Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2011
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Threads y DataModule

Hola a todos, espero que este tema vaya acá...
El tema es el siguiente. Tengo un datamodule que se se debe ejecutar en forma de backgroud en una aplicacion, ya que hace tareas de comunicacion con un servidor central.
Hay tareas que se ejecutan en este datamodule que hacen que la aplicacion se quede unos segundos congelada y luego sigue. Invenstigando un poco creo que lo mas conveniente es usar los Threads, pero no quiero tener que reescribir o copiar el datamodule completo, lo que me gustaria es poder ejecutar el datamodule completo, dentro de este threads.... ¿eso se puede hacer? ¿como?
desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 20-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un DataModule es un contenedor para almacenar DataSet, Table, Query, etc. pero no es algo que se pueda ejecutar, así que creo que hace falta que expliques de otra forma lo que necesitas porque no se entiende
Responder Con Cita
  #3  
Antiguo 20-10-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
Hola Brandolin!

Mira, técnicamente sí se puede hacer lo que buscas, de hecho es muy fácil. Por ejemplo con un código así:
Código Delphi [-]
procedure TMiThread.Execute;
var
    CopiaDatabamodule: TMiDatamodule; // esta copia del dabatamodule se ejecutará en background.
begin
    CopiaDatamodule := TMiDatamodule.Create(nil);
    CopiaDatamodule.ejecutar_operaciones_con_el_servidor;
end;

Peroooo... No estoy seguro que el resultado final te convenza. Además, no sé que código hay en el procedimiento "ejecutar_operaciones_con_el_servidor" que pueda dar problemas al ser ejecutado en un hilo separado.

En lo personal preferiría reescribir el código dentro del mismo Thread. Pero es cosa mía. A cómo te he mostrado, no es necesario transladar el código, se puede hacer utilizando la estructura que te he mostrado. Sin embargo de la última manera puede dar muchos dolores de cabeza si el código interactua mucho con la aplicación.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 20-10-2011
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Gracias por las ideas, en realidad yo estoy usando el datamodule como forma de encerrar una serie de cosas que hacen lo mismo, como por ejemplo un servicio de socket. Basicamente lo que hace es establecer un canal de comunicacion con un socketserver en el servidor y envia recibe informacion por ese canal. (ademas hay otros componentes como tablas, sqlquery, timers, etc)
He puesto y "encapsulado" de alguna forma en el datamodule todos los procesos que hacen a dicha cuestion, es decir lo chequeos, envios, recepcions, reconexiones etc etc etc...
de esta manera cuando queda mucho mas ordenada el codigo de la aplicacion ya que todo lo que tiene relacion con esto va en el datamodule.
El problema es que este datamodule notifica a diferentes partes de la aplicacion sobre cosas que pasan y la aplicacion envia cosas por medio de dicho socket.
Esto funciona sin problema pero hay veces que se queda congelada la aplicacion porque este module esta haciendo algo...
Creo que poner esto en un hilo es lo mas conveniente y "teoricamente" lo mas correcto. Pero el problema radica en que no podria crear una clase Threads que contenga el modulo y poner todas las funcionalidades dentro de este thread implica tener que generar mucho codigo en esta clase...
alguna otra idea...
Responder Con Cita
  #5  
Antiguo 20-10-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
Cita:
Empezado por brandolin Ver Mensaje
alguna otra idea...
Lo mejor que podrías hacer es encapsular en el Thread el código que hace que tu aplicación se detenga. Lo demás puedes dejarlo en el DataModule. El ejemplo que te proporcioné anteriormente, era solo un ejemplo crudo de cómo podría hacerse de forma fácil lo que en tu primer mensaje pedías.

Lo bueno es que ya te estás dando cuenta que no es tan fácil y hay cosas que es bueno dejar y otras quitar del Datamodule. Es por eso que creo que lo mejor que puedes hacer es determinar el código que sería un buen candidato para ser trasladado a un Thread.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 20-10-2011
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
interesante ...........

basicamente lo que se quiere poner segun tus palabras es que en el mismo datamodule ponga un threads que haga el trabajo en multitarea... y que el resto de las cosas queden como estan...????

voy a probar a ver como funciona... muchas gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
threads en dbExpress pborges36 Conexión con bases de datos 5 21-12-2010 17:18:47
pool of threads JXJ Varios 9 04-01-2009 02:45:41
Threads en delphi gesjug Varios 7 30-09-2008 14:25:57
uso de threads JULIPO API de Windows 2 25-07-2007 17:09:06
Threads zombies Archer Varios 1 25-09-2006 20:19:38


La franja horaria es GMT +2. Ahora son las 19:01:56.


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
Copyright 1996-2007 Club Delphi