FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Threads para Timbrar Documentos
Hola que tal, buen día, solicito de su apoyo para revisar el siguiente código, el cual estoy manejando hilos para el timbrado de las facturas electrónicas. Mi objetivo es tener un servidor de escucha, donde le estén llegando peticiones de timbrado, cuyo parámetro es la ruta del XML pendiente de timbrar, entonces cuando el servidor reciba dicha petición, creo un hilo para timbrar el documento fiscal, y retorno una cadena, el cual si este esta vacío, significa que se timbró correctamente, sino significa que hubo un error en el timbrado.
Si me funciona pero no me ejecuta el timbrado simultáneamente, sino que termina uno y continua con el otro. A continuación muestro el código del mi hilo.
Y el siguiente código es para llamar el hilo
Espero me puedan apoyar.
__________________
Atte. «° ßåRôµ Dâµµ¥-Bõ¥ °» v. 2007
|
#2
|
||||
|
||||
¿Estás llamando en algun momento al método Execute?
¿Puedes poner el código de cómo crear el Thread? La documentación dice: "Define the thread object's Execute method by inserting the code that should execute when the thread is executed. " "Defina el método Execute en el objeto TThread insertando el código que debe ejecutarse cuando se lanza el hilo."
__________________
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. Última edición por Neftali [Germán.Estévez] fecha: 02-07-2020 a las 09:43:47. |
#3
|
|||
|
|||
Threads para timbrar documentos
Cita:
Hola que tal, gracias por responder, olvide poner en foro el llamado al Thread. La variable wRuta, contiene la ruta del XML a Timbrar, y wResultado, como su nombre lo dice, recibo el resultado del timbrado. Así es como lo mando a llamar:
__________________
Atte. «° ßåRôµ Dâµµ¥-Bõ¥ °» v. 2007
|
#4
|
||||
|
||||
Vale. La cosa está un poco más clara...
Haces el Create con el parámetro a False, por lo tanto el thread se inicia automáticamente después de crearlo. En ese momento se ejecuta el método Execute, que por lo que veo no hace nada (lo tienes vacío). Ahí acabó la ejecución de tu hilo. En ese momento llamas al Terminate ¿Para qué? Luego lo que haces es ejecutar un método de tu clase (pTimbrado a través de la propiedad) que se ejecuta como cualquier otro método de cualquier otra clase, es decir, en el hilo principal de la aplicación. => Por eso tu ejecución es secuencial. Has creado una clase que deriva de TThread y no la usas. Creo que tienes un error de concepto con los Threads. Revisa esto: http://docwiki.embarcadero.com/Libra...TThread.Create O en mi blog tienes algunos ejemplos sencillos que te ayudarán a entender cómo funcionan. https://neftali.clubdelphi.com/ejemp...-sin-utilidad/ https://neftali.clubdelphi.com/ejemp...-ampliado-v-2/ https://neftali.clubdelphi.com/pendi...nd-tcontext3d/ Resumiendo mucho... (1) Meter muchas cosas dentro de una clase que derive de TThread no significa que estés utilizando Threads. (2) El método básico de la clase TThead es el método Execute. Lo que pongas ahí es lo que se ejecuta en un thread diferente al principal de la aplicación (en tu clase está vacío) (3) Importantes además de Execute, son el Terminate y el Synchronize. No se si me he explicado...
__________________
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. |
#5
|
|||
|
|||
Threads para Timbrar Documentos
Cita:
Buen día, definitivamente soy nuevo en esto de los Threads, realice estas modificaciones, y ya no hace nada Revise tus códigos y veo que usas el Create y Synchonize y me siento muy confundido, como puedo realizar el llamada pTimbrado dentro del hilo.
y así lo llamo
__________________
Atte. «° ßåRôµ Dâµµ¥-Bõ¥ °» v. 2007
|
#6
|
||||
|
||||
Pregunta offtopic:
¿Por qué medio atiende a los clientes el servidor?... Pregunto esto porque dependiendo de esto, es muy posible que tu servidor ya atienda las peticiones con multi-threading. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
||||
|
||||
Cita:
Por otro lado el Synchonize es para sincronizar partes de tu hilo con el hilo prinpical, así que cuando usas el Synchonize, el código que lo utilize pasa a ejecutarse en el hilo prinicipal. Para que me entiendas y simplificando mucho:
Ahora: (a) Si todo lo que tienes dentro del procedimiento es "Thread-safe", debería funcionar correctamente. (b) Si hay alguna parte que no es "thread-safe" dentro del procedimiento pTimbrado, esa parte es la que deberás extraer un un segundo procedimiento y llamarla con un Synchonize. Por ejemplo (sólo para que lo entiendas), imaginemos que estas 2 líneas no fueran "thread-safe":
Pues las pasarías a un procedimiento:
Y en su lugar pondrías:
Al realizar el Execute, se ejecutaría todo lo que hay dentro en un thread diferente en paralelo con el hilo principal de la aplicación, al llegar al punto del CopiarFichero, se para el thread y el CopiarFichero se ejecuta en el thread principal (por lo tanto en ese punto no hay paralelismo) y seguidamente el resto del código se vuelve a ejecutar en el Thread en paralelo con el principal. En resumen, el código del thread debe estar dento del Execute y las llamadas con Synchonize deben ser las mínimas posibles y lo más pequeñas posibles dentro del Thread cuando necesitamos que algo que no es "thread-safe" y se ejecute en el hilo principal(por ejemplo como he dicho cuando mosificamos controles visuales).
__________________
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. Última edición por Neftali [Germán.Estévez] fecha: 06-07-2020 a las 09:06:23. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
threads | DarkSton | Varios | 5 | 13-06-2017 14:40:07 |
"Plantillas" para tipos de documentos. | santiago14 | Varios | 1 | 17-10-2013 19:53:57 |
Formato de partición para "Mis Documentos" | Ñuño Martínez | Windows | 9 | 12-06-2008 16:31:18 |
Threads in DLL's | Gianni | Varios | 0 | 20-07-2007 22:18:23 |
Propiedades y Métodos para Documentos Word | elixir_Gabriela | Servers | 2 | 28-12-2006 15:22:42 |
|