Ver Mensaje Individual
  #13  
Antiguo 29-10-2013
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.318
Reputación: 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
Buenas.
Llego un poco tarde al hilo y a lo mejor no aporto gran cosa, entre otras razones porque me faltan bastantes datos para hacerme a la idea completa del problema.

Por un lado, has colocado las definiciones de unas clases para hilos que no se de donde salen; Me refiero a estas:
Código Delphi [-]
private
{ Private declarations }
Thread: TStopStartThread;
WaitThread: TWaitThread;
UntilFlag: TEvent;
...

Buscando por Internet he llegado a esta página dónde se habla de esas clases, así que supongo que debe ser esa unidad (a estas cosas es a lo que se refieren cuando te hablan de que no somos adivinos,...).

Por otro lado, uno de esos threads, llama al procedimiento CortarArchivo, que has colocado más arriba.

No se qué hacen esas clases para trabajar con threads, por lo que veo en la página te hacen más fácil trabajar con algunos métodos de los threads, pero aparte de que te simplifiquen el trabajo, debes conocer cómo van los threads, ya que me da la impresión de que no pueden solucionar TODAS las limitaciones de los threads.
¿A qué me refiero con esto?

Antes de nada, debes saber que la VCL no es "Thread-safe"; Esto quiere decir, de forma simple, que no puedes acceder a elementos de la VCL desde 2 threads distintos de forma indiscriminada, o lo que es lo mismo; No puedes acceder a un elemento de la VCL del programa principal, desde un hilo.

Tu procedimiento CortarArchivo accede a algunos elementos como Memo1, opc1, prBar,... que imagino (sigo con la bola de cristal adivinando) que están definidos en el formulario principal. Dado que la VCL no es "thread-safe", no puedes acceder a esos elementos directamente.

¿Esto quiere decir que no puedes usarlos?
NO.

Para poder acceder a esos elementos, los threads poseen el método Synchronize. Que lo que hace, es ejecutar un método del thread (que acceda a elementos de la VCL), asegurándose que que ningún hilo más (incluído el principal) accede a ellos durante ese periodo de tiempo.

Por lo tanto, creo que los problemas del hilo, con la información que has colocado, está en el procedimiento CortarArchivo y en los accesos que haces. No se si en otros haces cosas similares.

Espero haberme explicado medianamente bien.

Un saludo.
__________________
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