Ver Mensaje Individual
  #3  
Antiguo 07-07-2020
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 22
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