Ver Mensaje Individual
  #1  
Antiguo 18-05-2005
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Reputación: 20
elcigarra Va por buen camino
problemas con threads dentro de un componente

Amigos, estoy diseñando un componente visual que funciona como indicador. Dicho indicador alcanza su valor no directamente sinó simulando un movimiento que dura unos pocos segundos. Para que una aplicación que lo use pueda seguir funcionando mientras el control "se mueve" he puesto todo el código que simula el movimiento en un thread dentro del componente que se activa cuando el valor (a indicar) cambia y se suspende al llegar a dicho valor. El problema es que no logro que una aplicación con este componente siga funcionando mientras el control "se mueve". Todo se congela hasta que termine el movimiento como si no funcionara en hilos. ¿Tienen alguna idea de qué hice mal? Tratando de resumir, el esquema de código sería algo así:

procedure dibujar;
.....{dibuja todo el control y su escala en la posición requerida (dada por el "valor" temporal en el hilo), es un procedimiento público dentro de la unidad}

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}
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
Synchronize(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;

Si no se entiende puedo profundizar o hasta mandar un demo.

Última edición por elcigarra fecha: 18-05-2005 a las 03:21:56.
Responder Con Cita