Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2020
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Question Consulta sobre Threads

Muy buenas foristas. Tengo la siguiente duda.

He desarrollado un sistema para escritorio ( MDI ) para casas de comidas ( pizzerias, deliverys, etc ), en la cual toman pedidos ingresando el numero de telefono. Por otro lado, tengo otra ventana mdi hija que se ejecuta minimizada al iniciar el sistema, y en la cual tengo un timer que se ejecuta cada 90 segundos chequeando contra un webservice de un tercero , pedidos nuevos en la app del cliente y asi integrarlos al sistema.

Esto anduvo barbaro hasta ahora hasta que los pedidos por la app se fueron incrementando y asi tambien los pedidos por telefono, y lo que
esta pasando ( es mi suposicion ) es que cuando se esta ingresando datos en algun edit del form principal , el sistema queda "bloqueado" por un par de segundos en el cual , el timer se esta ejecutando y accediendo al web service buscando nuevos pedidos.

Por lo cual he pensado que lo mejor es hacer que ese timer y busqueda se realice en otro hilo asi no interfiere con el principal.

He revisado y leido muchos foros y helps donde se habla de hilos y mis dudas son las siguientes:

- Debo crear un thread donde en el metodo Execute solo consulte contra el wb y nada mas , no ? He leido que no se puede usar nada de UI en este metodo asi que los edits y grillas que tengo para mostrar lo que me devuelve el ws deben estar fuera de este metodo ? En donde ?

- El timer deberia seguir funcionando igual pero llamando siempre al methodo execute del thread o deberia crear y destruir el hilo en cada instancia ??

- Los metodos start y/o resume del thread , en este caso son utiles ? Y en caso afirmativo, como se deben usar ?

Cuales serian sus consejos para este caso ??

Muchas gracias !!

He estado probando el componente BMThread de Boian Mitov, el cual esta muy bien estructurado, pero al no saber como encarar el desarrolllo de hilos, no me ha servido de mucho hasta el momento.
Responder Con Cita
  #2  
Antiguo 07-07-2020
oscorm oscorm is offline
Miembro
 
Registrado: ago 2004
Ubicación: Alcorcón
Posts: 59
Poder: 20
oscorm Va por buen camino
Hola paisano!
Lo puedes implementar en un servicio de Windows que ejecute el hilo, es bastante simple.
Implementas el método execute con un timer y arreando.
Espero haberme explicado, si no es el caso, lo intentaré hacer mejor la próxima vez.
Saludos
Responder Con Cita
  #3  
Antiguo 07-07-2020
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por lbidi Ver Mensaje
Muy buenas foristas. Tengo la siguiente duda.

He desarrollado un sistema para escritorio ( MDI ) para casas de comidas ( pizzerias, deliverys, etc ), en la cual toman pedidos ingresando el numero de telefono. Por otro lado, tengo otra ventana mdi hija que se ejecuta minimizada al iniciar el sistema, y en la cual tengo un timer que se ejecuta cada 90 segundos chequeando contra un webservice de un tercero , pedidos nuevos en la app del cliente y asi integrarlos al sistema.

Esto anduvo barbaro hasta ahora hasta que los pedidos por la app se fueron incrementando y asi tambien los pedidos por telefono, y lo que
esta pasando ( es mi suposicion ) es que cuando se esta ingresando datos en algun edit del form principal , el sistema queda "bloqueado" por un par de segundos en el cual , el timer se esta ejecutando y accediendo al web service buscando nuevos pedidos.

Por lo cual he pensado que lo mejor es hacer que ese timer y busqueda se realice en otro hilo asi no interfiere con el principal.

He revisado y leido muchos foros y helps donde se habla de hilos y mis dudas son las siguientes:

- Debo crear un thread donde en el metodo Execute solo consulte contra el wb y nada mas , no ? He leido que no se puede usar nada de UI en este metodo asi que los edits y grillas que tengo para mostrar lo que me devuelve el ws deben estar fuera de este metodo ? En donde ?

- El timer deberia seguir funcionando igual pero llamando siempre al methodo execute del thread o deberia crear y destruir el hilo en cada instancia ??

- Los metodos start y/o resume del thread , en este caso son utiles ? Y en caso afirmativo, como se deben usar ?

Cuales serian sus consejos para este caso ??

Muchas gracias !!

He estado probando el componente BMThread de Boian Mitov, el cual esta muy bien estructurado, pero al no saber como encarar el desarrolllo de hilos, no me ha servido de mucho hasta el momento.

El thread puede trabajar con elementos de la GUI, pero debes asegurarte de utilizar Synchronize. Y por supuesto tener cuidado con el manejo simultáneo que el WS y el usuario le daran al componente. Me refiero que es posible que el usuario esté seleccionado un item que en los siguienets segundos cambie por otro en un refresh (por ejemplo).

Hay un componente que me parece muy interesante y es el BackgroundWorker de DelphiArea, que pese a no tener mantenimiento en mas de una década sigue vigente. Todos los compoentes de Delphi Area son sorprendentes porque puedes instalarlos y operarlos sin problemas en nuevas versiones de windows o Delphi.

Es solo para que lo revises, yo tengo un programa que inicié hace años con ese componente y no he querido cambiarlo (por pereza), pero igual funciona de maravilla. Los demos que tiene son pequeños pero muy ilustrativos, y en dos minutos estas poniendo el componente a producir.

Bueno, volviendo a tu caso, puedes además implementar una cola de mensajeria, es decir, que todo lo que se consulte a través del WS, se vaya almacenando en una BD local, asi tu programa interactua con una BD y no direcatmente con el WS... de este modo, si tu WS está "en espera" consultando info, tu programa está yendo y vieneindo a la BD sin problemas.


saludo,
Responder Con Cita
  #4  
Antiguo 07-07-2020
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Muchas gracias a ambos.

Vere ese componente que mencionas gatosoft a ver si lo puedo implementar.

Saludos !!
Responder Con Cita
  #5  
Antiguo 08-07-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Visto que no tienes mucha experiencia con hilos yo haría unas pruebas primero fuera de la aplicación.
Puedes revisar ejemplos de hilos en mi blog. Son sencillos, pero para ver la estructura y su funcionamiento creo que son suficientes.
https://neftali.clubdelphi.com/ejemp...-sin-utilidad/
https://neftali.clubdelphi.com/ejemp...-ampliado-v-2/
https://neftali.clubdelphi.com/utili...o-con-threads/
https://neftali.clubdelphi.com/ping-...ando-icmp-dll/
https://neftali.clubdelphi.com/obten...de-una-cancin/
https://neftali.clubdelphi.com/pendi...nd-tcontext3d/

Cita:
Empezado por lbidi Ver Mensaje
- Debo crear un thread donde en el metodo Execute solo consulte contra el wb y nada mas , no ?
El el Thread debes poner todo lo que necesites. En tu caso, crear los componentes de acceso, realizar la consulta y destruir lo creado.


Cita:
Empezado por lbidi Ver Mensaje
He leido que no se puede usar nada de UI en este metodo asi que los edits y grillas que tengo para mostrar lo que me devuelve el ws deben estar fuera de este metodo ? En donde ?
Tal y como te han dicho todo lo relacionado con UI puedes hacerlo dentro del Thread, pero utilizando el Synchronize.


Cita:
Empezado por lbidi Ver Mensaje
- El timer deberia seguir funcionando igual pero llamando siempre al methodo execute del thread o deberia crear y destruir el hilo en cada instancia ??
Yo dejaría el Timer y cada X tiempo, tal y como comentas, crearía el Thread, lo ejecutaría y lo destruiría.
Luego puedes decrementar el tiempo a medida que quieras aumentar la consulta de pedidos y que sea más frecuente


Cita:
Empezado por lbidi Ver Mensaje
- Los metodos start y/o resume del thread , en este caso son utiles ? Y en caso afirmativo, como se deben usar ?
Yo creo que te bastará con Crear, Ejecutar y Destruir.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 08-07-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por oscorm Ver Mensaje
Lo puedes implementar en un servicio de Windows que ejecute el hilo, es bastante simple.
Implementas el método execute con un timer y arreando.

No le veo sentido a eso.
Si ya tiene una aplicacióin funcionando que es la que neceita los datos, para qué crear un servicio independiente.
¿Porqué no llamarlo desde la aplicación?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 08-07-2020
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Muchas gracias German por tus comentarios.. Revisare tus links y vere como implementarlo.

Saludos. !!
Responder Con Cita
  #8  
Antiguo 09-07-2020
oscorm oscorm is offline
Miembro
 
Registrado: ago 2004
Ubicación: Alcorcón
Posts: 59
Poder: 20
oscorm Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
No le veo sentido a eso.
Si ya tiene una aplicacióin funcionando que es la que neceita los datos, para qué crear un servicio independiente.
¿Porqué no llamarlo desde la aplicación?
Se puede hacer como tu dices claro, por lo que leí me pareció mejor que un servicio independiente se encargara de la tarea.
al final de cuentas no importa el como sino que funcione
Responder Con Cita
Respuesta



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
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Consulta sobre App MDI MaMu OOP 4 15-07-2007 21:30:15
Consulta sobre SET's dieleo Varios 4 03-01-2007 20:29:58
consulta sobre .ini bytecero Varios 2 02-02-2005 21:01:09
Threads sobre Componentes NeWNeO Varios 6 05-07-2004 15:43:17


La franja horaria es GMT +2. Ahora son las 01:15:48.


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