¿Cómo programarlo? Una pregunta un poco generica...<br>Asumiré que me preguntas qué opciones tienes:<br><br>Si no puedes controlar nada del código del jugador, supongo que lo más correcto sería tenerlos en procesos distintos. Para matarlo simplemente mandarías una señal al proceso en cuestión y listo. Podrías comunicar los procesos usando sockets.<br>
<br>Sino, yo añadiría un método a tu implementación del QThread que modificara una variable que diría al algoritmo de QThread::run que tiene que acabar de forma que no se rompa nada.<br><br>Si no tienes acceso al código pero quieres seguir usando threads, puedes usar QThread::terminate para parar el thread.<br>
<br>Para contar los segundos que te esperarás puedes usar QTimer.<br><br><div class="gmail_quote">2009/8/18 Laura Santiago de la Cal <span dir="ltr"><<a href="mailto:lalii24@hotmail.com">lalii24@hotmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>
¿Cómo programarlo?<br><br><hr>Date: Tue, 18 Aug 2009 13:35:12 +0200<br>From: <a href="mailto:aleixpol@kde.org" target="_blank">aleixpol@kde.org</a><br>To: <a href="mailto:kde-devel-es@kde.org" target="_blank">kde-devel-es@kde.org</a><br>
Subject: Re: [Kde-devel-es] Matar hilos (QThread) pasado un tiempo sin hacer        sleep<div><div></div><div class="h5"><br><br>Claro, puedes tener un hilo para cada proceso que tienes en background. Puedes controlarlos desde el thread principal.<br>
Cual es el problema?<br><br><div>2009/8/18 Laura Santiago de la Cal <span dir="ltr"><<a href="mailto:lalii24@hotmail.com" target="_blank">lalii24@hotmail.com</a>></span><br>
<blockquote style="padding-left: 1ex;">
<div>
Hola, explico lo que busco.<div><br><div>Tengo 2 jugadores, estos jugadores no los programo yo y entonces no sé lo que pone dentro de su código, cada uno de estos dos jugadores será un hilo de mi programa.</div><div>Lo que quiero es que si el programa que contenga el jugador 1 (o el 2) tarda más de 5 segundos en ejecutarse entero matarlo, pero si tarda por ejemplo 2 segundos mi programa principal no se quede bloqueada durante otros 3 segundos sino que continue con lo siguiente.</div>
<div>En pseudocódigo sería algo así</div><div><br></div><div>iniciar temporizador;</div><div>jugador1->jugar;</div><div>si jugador1 ha acabado o temporizador==fin</div><div> jugador->terminate;</div><div>iniciar temporizador</div>
<div>jugador2->jugar;</div><div>si jugador2 ha acabado o temporizador==fin</div><div> jugador->terminate;</div><div><br></div><div>Es decir, quiero que el jugador2 juegue siempre despues del jugador1, pero quiero que si el jugador1 tarda mucho en acabar se le pase su turno y sea el turno del jugador2...</div>
<div><br></div><div>Es una especie de seguridad ya que no sé que contienen los hilos que ejecuto porque son de usuarios externos, pero en ningún caso quiero hacer un sleep(5) en mi programa, porque busco que sea lo más rápido posible, y si el jugador1 tardara solo 1 segundo en hacer su operación sería inconcedible que el programa principal estuviera otros 4 esperando</div>
<div><br></div><div>A ver si alguien sabe si se puede o no hacer algo similar.</div><div><br></div><div>Gracias</div><div><hr></div><div><br>> Date: Thu, 4 Jun 2009 13:30:32 +0200<br>> From: <a href="mailto:ereslibre@kde.org" target="_blank">ereslibre@kde.org</a><br>
> To: <a href="mailto:lalii24@hotmail.com" target="_blank">lalii24@hotmail.com</a><br>> CC: <a href="mailto:kde-devel-es@kde.org" target="_blank">kde-devel-es@kde.org</a><br>> Subject: Re: [Kde-devel-es] Matar hilos (QThread) con el tiempo<br>
> <br>> > Hola de nuevo<br>> <br>> Buenas,<br>> <br>> > Efectivamente así si que me termina la ejecución del hilo (muchas <br>> > gracias) pero con ello no puedo hacer lo que quiero del todo <br>
> > correcto (por decirlo de alguna manera) ya que el programa principal <br>> > no quiero que se quede dormido, quiero que si el hilo termina por <br>> > sí sólo en menos de Xsegundos seguir con la ejecución normal, pero <br>
> > si tarda más de esos segundos matarlo yo y seguir con la ejecución <br>> > normal...<br>> > ¿Alguna idea de cómo hacer esto?<br>> <br>> Cuando ejecutas un hilo, al no ser que esperes a una variable <br>
> condicional o hagas un lock sobre un mutex o sobre un semáforo que te <br>> bloquee (o un join sobre el thread recientemente iniciado), la <br>> ejecución sigue normal. Es decir:<br>> <br>> programaPrincipal()<br>
> {<br>> lanzaThread1();<br>> hazAlgo();<br>> }<br>> <br>> El código de hazAlgo() se va a ejecutar (muy probablemente, depende <br>> del scheduler del SO y demás...) en paralelo con el código que <br>
> lanzaThread ejecute al lanzar el nuevo thread.<br>> <br>> Por tanto, lo que supongo que quieres es:<br>> <br>> programaPrincipal()<br>> {<br>> lanzaThread();<br>> // espero a que termine lanzaThread()<br>
> hazAlgo();<br>> }<br>> <br>> Entonces, no entiendo muy bien el sentido de crear un nuevo thread. <br>> Porque realmente, si lanzaThread() creara un thread y llamara a <br>> ejecutaCodigo(), por ejemplo, esto último sería equivalente a:<br>
> <br>> programaPrincipal()<br>> {<br>> ejecutaCodigo();<br>> hazAlgo();<br>> }<br>> <br>> ¿Cuál es el motivo de esto? Es decir, ¿qué quieres conseguir? <br>> ¿ejecutar algo costoso o bloqueante sin que se quede colgada la <br>
> interfaz?<br>> <br>> Si es así, hay dos formas de hacerlo... con una guarrería <br>> (QEventLoop), o algo en condiciones, hacer todo de manera asíncrona y <br>> que el thread lance una señal que haga que algo cambie en la interfaz <br>
> cuando termine su ejecución.<br>> <br>> <br>> Un saludo,<br>> Rafael Fernández López.<br></div></div><br><hr>Messenger cumple 10 años <a href="http://www.vivelive.com/aniversariomessenger" target="_blank">¡Conéctate y celébralo con toda la comunidad!</a></div>
<br>_______________________________________________<br>
Kde-devel-es mailing list<br>
<a href="mailto:Kde-devel-es@kde.org" target="_blank">Kde-devel-es@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/kde-devel-es" target="_blank">https://mail.kde.org/mailman/listinfo/kde-devel-es</a><br>
<br></blockquote></div><br><br></div></div><div class="hm"><hr>¡Que no te pillen atascos ni radares! En MSN te damos toda la información sobre el estado de las carretas y te mostramos <a href="http://motor.es.msn.com/servicios/" target="_blank">dónde se encuentran los radares de tráfico.</a></div>
</div>
<br>_______________________________________________<br>
Kde-devel-es mailing list<br>
<a href="mailto:Kde-devel-es@kde.org">Kde-devel-es@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/kde-devel-es" target="_blank">https://mail.kde.org/mailman/listinfo/kde-devel-es</a><br>
<br></blockquote></div><br>