<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
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.<br><hr size="2" width="100%"><br>&gt; Date: Thu, 4 Jun 2009 13:30:32 +0200<br>&gt; From: ereslibre@kde.org<br>&gt; To: lalii24@hotmail.com<br>&gt; CC: kde-devel-es@kde.org<br>&gt; Subject: Re: [Kde-devel-es] Matar hilos (QThread) con el tiempo<br>&gt; <br>&gt; &gt; Hola de nuevo<br>&gt; <br>&gt; Buenas,<br>&gt; <br>&gt; &gt; Efectivamente así si que me termina la ejecución del hilo (muchas   <br>&gt; &gt; gracias) pero con ello no puedo hacer lo que quiero del todo   <br>&gt; &gt; correcto (por decirlo de alguna manera) ya que el programa principal  <br>&gt; &gt;  no quiero que se quede dormido, quiero que si el hilo termina por  <br>&gt; &gt; sí  sólo en menos de Xsegundos seguir con la ejecución normal, pero  <br>&gt; &gt; si  tarda más de esos segundos matarlo yo y seguir con la ejecución   <br>&gt; &gt; normal...<br>&gt; &gt; ¿Alguna idea de cómo hacer esto?<br>&gt; <br>&gt; Cuando ejecutas un hilo, al no ser que esperes a una variable  <br>&gt; condicional o hagas un lock sobre un mutex o sobre un semáforo que te  <br>&gt; bloquee (o un join sobre el thread recientemente iniciado), la  <br>&gt; ejecución sigue normal. Es decir:<br>&gt; <br>&gt; programaPrincipal()<br>&gt; {<br>&gt;      lanzaThread1();<br>&gt;      hazAlgo();<br>&gt; }<br>&gt; <br>&gt; El código de hazAlgo() se va a ejecutar (muy probablemente, depende  <br>&gt; del scheduler del SO y demás...) en paralelo con el código que  <br>&gt; lanzaThread ejecute al lanzar el nuevo thread.<br>&gt; <br>&gt; Por tanto, lo que supongo que quieres es:<br>&gt; <br>&gt; programaPrincipal()<br>&gt; {<br>&gt;      lanzaThread();<br>&gt;      // espero a que termine lanzaThread()<br>&gt;      hazAlgo();<br>&gt; }<br>&gt; <br>&gt; Entonces, no entiendo muy bien el sentido de crear un nuevo thread.  <br>&gt; Porque realmente, si lanzaThread() creara un thread y llamara a  <br>&gt; ejecutaCodigo(), por ejemplo, esto último sería equivalente a:<br>&gt; <br>&gt; programaPrincipal()<br>&gt; {<br>&gt;      ejecutaCodigo();<br>&gt;      hazAlgo();<br>&gt; }<br>&gt; <br>&gt; ¿Cuál es el motivo de esto? Es decir, ¿qué quieres conseguir?  <br>&gt; ¿ejecutar algo costoso o bloqueante sin que se quede colgada la  <br>&gt; interfaz?<br>&gt; <br>&gt; Si es así, hay dos formas de hacerlo... con una guarrería  <br>&gt; (QEventLoop), o algo en condiciones, hacer todo de manera asíncrona y  <br>&gt; que el thread lance una señal que haga que algo cambie en la interfaz  <br>&gt; cuando termine su ejecución.<br>&gt; <br>&gt; <br>&gt; Un saludo,<br>&gt; Rafael Fernández López.<br><br /><hr />Charlas más divertidas con el nuevo <a href='http://download.live.com' target='_new'>Windows Live Messenger</a></body>
</html>