| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 22 Jun, 2009 11:08 pm Asunto: Algo hago mal con los hilos |
|
|
Buenas a todos,
Os cuento, he creado un hilo siguiendo más o menos los pasos que me decis por aqui y el problema es que se me sigue relentizando el ordenador exactamente igual que sin tener hilos, me explico.
Tengo una aplicacion que hace muchas peticiones de Querys del tipo:
QueQuery->Active=true;
El problema es que el ordenador se medio para y hasta el raton me va a trompicones, por eso he creado el hilo y esperaba que dandole la mas baja prioridad esto no pasara, pero todo sigue igual, no ha cambiado nada, quizas es que lo hago mal.
En el constructor del hilo he añadido la Query:
__fastcall THilo::THilo(bool CreateSuspended,TADOQuery *QueQuery)
Luego desde la aplicacion creo el hilo y le paso la Query:
THilo *MiHilo=new THilo(true,QueQuery);
MiHilo->Priority = tpIdle;
Y en el hilo hago el Active:
__fastcall THilo::THilo(bool CreateSuspended,TADOQuery *QueQuery)
: TThread(CreateSuspended)
{
Priority = tpIdle;
QueQuery->Active=true;
}
Que hago mal? por que no tiene ningún efecto y todo sigue igual de lento?
Incluso como veis he repetido la prioridad por si estaba mal puesta en el constructor, pero nada.
Se os ocurre algo?
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 22 Jun, 2009 11:36 pm Asunto: |
|
|
¿No programaste el bucle del hilo en la función execute del hilo?
Es aquí donde debes programas el código del hilo y la forma de salir del bucle.
Saludos. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 22 Jun, 2009 11:47 pm Asunto: |
|
|
mmm no, como se haria?
Yo lo unico que quiero es desde el formulario principal pasarle como parametro la query que quiero ejecutar y nada más, que el hilo se cierre o se elimine o lo que sea despues de ejecutar la Query.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 23 Jun, 2009 2:31 pm Asunto: |
|
|
| Carlos J. Fernandez escribió: | | Yo lo unico que quiero es desde el formulario principal pasarle como parametro la query que quiero ejecutar y nada más, que el hilo se cierre o se elimine o lo que sea despues de ejecutar la Query. |
Pues entonces implementa la función execute del hilo sin bucle, sólo ejecutando la Query. Al ejecutarla y terminar la función, el hilo termina sólo.
Eso si, mira bien la liberación de su memoria.
Revisa la ayuda del Builder TThread.
Saludos. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 23 Jun, 2009 6:19 pm Asunto: |
|
|
Vale,
Voy a mirarlo por que lo único que no se como hacerlo es lo de liberar la memoria, por que desde la aplicación no se en que momento se acaba el hilo.
Gracias.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 23 Jun, 2009 11:01 pm Asunto: |
|
|
| Carlos J. Fernandez escribió: | | ...lo único que no se como hacerlo es lo de liberar la memoria, por que desde la aplicación no se en que momento se acaba el hilo. |
Coloca una bandera en el hilo que puedes consultar desde la aplicación, a sincroniza tu hilo para que varíe un valor VCL en un control invisible... que genere un evento... La imaginación es libre... Podrás saber cuando tu hilo acabó y entonces: delete Hilo; o te esperas al final del programa si el hilo no será necesitado mas...
Saludos. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 24 Jun, 2009 11:54 pm Asunto: |
|
|
Estoy haciendo pruebas y mas o menos lo voy sacando.
Ya te contare,
Gracias de nuevo
Carlos |
|
| Volver arriba |
|
 |
|