Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 06-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: 19.439
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 ludan508 Ver Mensaje
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.
Lo primero que debes intentar es colocar el código del timbrado dentro del Execute, o hacer la llamada al procedimiento de timbrado dentro de él.
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:
  • Lo que hay en Execute se ejecuta en un hilo diferente al principal (lo que quieres).
  • Cuando hay algo que no se puede usar dentro de un hilo porque no es "thread-safe" (por ejemplo acceso a componentes visuales) hay que usar Synchonize. Por eso si TODO lo que hay en el Execute lo llamas con Synchonize, le estás diciendo que TODO lo ejecute en el hilo principal.
Tal como o tienes ahora, quita el método Synchonize y has la llamada directamente a pTimbrado:

Código Delphi [-]
procedure TTimbrado.Execute; 
begin     
  FreeOnTerminate := True;     
  pTimbrado; 
end;


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":
Código Delphi [-]
if FileExists(sRutaXMLSave + lUUID + '.xml') then   
  CopyFile(PChar(sRutaXMLSave + lUUID + '.xml'), PChar(sRutaSave), True);

Pues las pasarías a un procedimiento:

Código Delphi [-]
procedure CopiarFichero();
begin
  if FileExists(sRutaXMLSave + lUUID + '.xml') then   
    CopyFile(PChar(sRutaXMLSave + lUUID + '.xml'), PChar(sRutaSave), True);
end;

Y en su lugar pondrías:

Código Delphi [-]
...
try  
  Synchonize(CopiarFichero)
except on e: Exception do 
  begin
    wResult := e.Message;   
  end; 
end;
...

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.
Responder Con Cita
 



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 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


La franja horaria es GMT +2. Ahora son las 20:09:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi