Ver Mensaje Individual
  #12  
Antiguo 20-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por elcigarra
el tema es que no entiendo el texto que enviaste de la ayuda (y no es porque no entienda inglés).
Evidentemente aún te falta un poquitin por el lado de threads. Lo cierto es que synchronize sirve para evitar conflictos con el hilo principal de la VCL, y ejecuta el método que le envias mientras deja suspendido el hilo que lo llama. Por la forma en que haces las cosas, esto es equivalente a ejecutar todo en el hilo principal de la VCL (como si no fuese multihilos), pues siempre se está corriendo dentro de synchronize.

Cita:
Empezado por elcigarra
Jachguate, ¿tu decís que no puedo utilizar synchronize en los VCL?
¿cuando dije semejante barbaridad?

Cita:
Empezado por elcigarra
¿Cual es la alternativa entonces? Si tienes una variante a mi esquema tal vez pueda hacerlo funcionar.
Soy bastante rehacio a publicar trozos de código, pero esta vez por razones didácticas, he preparado esto, que estoy seguro funcionará mejor, aunque no creo que sea lo ideal:

Código:
procedure mythread.mover;
begin
  while not (valortemporal = valorfinal) do
  begin
  {con un algoritmo calculo valor temporal en función del tiempo
   transcurrido desde que se inició el movimiento, es decir:
   empieza en el valor viejo y termina en el nuevo}
    synchronize(dibujar);
    sleep(20); {esto hace que se redibuje cientos de veces
                todo el componente simulando el movimiento hasta llegar
                al valor}
  end;
  mythread.suspend; {hasta que el valor vuelva a cambiar}
end;

procedure mythread.execute
begin
  Repeat
    Mover;
  until Terminated;
end;

{y dentro del código del componente y fuera del hilo, para cuando cambia el valor}
procedure mycomponent.SetValor(Value: Single);
begin
  FValor:=Value;
  mythread.Resume;
end;
Cita:
Empezado por elcigarra
He visto ejemplos de VCL con threads pero en ningun caso se simulan movimientos continuos como en el mío.
Que hay de la demo de threads que ya habia propuesto hector, los progressbar (o lo que sea que utilice) se "mueven" al mismo tiempo....

Cita:
Empezado por elcigarra
El segundo en actualizarse (que es el único que funciona) utiliza los valores de variables que pertenecen al primero. Es como que se le cruzan las variables del otro. ¿Alguna idea?
Claro, está usando las mismas variables.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita