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

Laura Santiago de la Cal lalii24 at hotmail.com
Fri Jun 5 08:50:21 CEST 2009


Hola, primero gracias por tardar tan poco en contestar y segundo, lo que busco es crear un "motor" que dirige dos hilos (programas creados por el usuario y que por lo tanto no sé cuanto tiempo van a tardar en terminar), estos dos hilos deben "alternarse", es decir cuando uno termine o se pase del tiempo asignado que este hilo muera y se inicie el nuevo hilo.

> Date: Thu, 4 Jun 2009 13:30:32 +0200
> From: ereslibre at kde.org
> To: lalii24 at hotmail.com
> CC: kde-devel-es at kde.org
> Subject: Re: [Kde-devel-es] Matar hilos (QThread) con el tiempo
> 
> > 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.

_________________________________________________________________
Chatea sin límites en Messenger con la tarifa plana de Orange
http://serviciosmoviles.es.msn.com/messenger/orange.aspx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/kde-devel-es/attachments/20090605/6f04ba60/attachment.htm 


More information about the Kde-devel-es mailing list