Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2005
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 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
 



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


La franja horaria es GMT +2. Ahora son las 21:04:25.


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