[Kde-devel-es] Matar hilos (QThread) con el tiempo

Rafael Fernández López ereslibre at kde.org
Thu Jun 4 13:30:32 CEST 2009


> Hola de nuevo

Buenas,

> Efectivamente así si que me termina la ejecución del hilo (muchas   
> gracias) pero con ello no puedo hacer lo que quiero del todo   
> correcto (por decirlo de alguna manera) ya que el programa principal  
>  no quiero que se quede dormido, quiero que si el hilo termina por  
> sí  sólo en menos de Xsegundos seguir con la ejecución normal, pero  
> si  tarda más de esos segundos matarlo yo y seguir con la ejecución   
> normal...
> ¿Alguna idea de cómo hacer esto?

Cuando ejecutas un hilo, al no ser que esperes a una variable  
condicional o hagas un lock sobre un mutex o sobre un semáforo que te  
bloquee (o un join sobre el thread recientemente iniciado), la  
ejecución sigue normal. Es decir:

programaPrincipal()
{
     lanzaThread1();
     hazAlgo();
}

El código de hazAlgo() se va a ejecutar (muy probablemente, depende  
del scheduler del SO y demás...) en paralelo con el código que  
lanzaThread ejecute al lanzar el nuevo thread.

Por tanto, lo que supongo que quieres es:

programaPrincipal()
{
     lanzaThread();
     // espero a que termine lanzaThread()
     hazAlgo();
}

Entonces, no entiendo muy bien el sentido de crear un nuevo thread.  
Porque realmente, si lanzaThread() creara un thread y llamara a  
ejecutaCodigo(), por ejemplo, esto último sería equivalente a:

programaPrincipal()
{
     ejecutaCodigo();
     hazAlgo();
}

¿Cuál es el motivo de esto? Es decir, ¿qué quieres conseguir?  
¿ejecutar algo costoso o bloqueante sin que se quede colgada la  
interfaz?

Si es así, hay dos formas de hacerlo... con una guarrería  
(QEventLoop), o algo en condiciones, hacer todo de manera asíncrona y  
que el thread lance una señal que haga que algo cambie en la interfaz  
cuando termine su ejecución.


Un saludo,
Rafael Fernández López.


More information about the Kde-devel-es mailing list