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

Albert Astals Cid aacid at kde.org
Sat May 16 18:34:17 CEST 2009


A Divendres, 15 de maig de 2009, Laura Santiago de la Cal va escriure:
> Hola, soy nueva en esta listasde distribución (me la recomendaron desde
> otra) y tengo un problema que he mirado por todas partes y no le encuentro
> solución, espero que alguno de ustedes me pueda orientar. Resulta que tengo
> un proceso que quiero que "guie" 2 hilos (QThread), para ello lo que quiero
> es que llame al primero e independientemente de porque parte de la
> ejecución se encuentre este hilo a los 5 segundos mate a este hilo y llame
> al segundo. 

No, no quieres hacer eso, matar un thread independientemente de la parte en la 
que se encuentre es una MUY MALA práctica de programación.

> ¿Alguien sabe como hacerlo? Lo que yo he intentado es lo
> siguiente, pero no funciona:
>
> //Los 2 procesos que compiten
>     a = new clase() ; //clase herda de QThread
>     b = new clase() ;
>
>     //Controlamos los hilos hasta que hay un ganador
>     while(get_win()==-1)
>     {
>
>         QTimer::singleShot(6, a, SLOT(quit()));
>         QTimer::singleShot(6, b, SLOT(quit()));
>         a->start();
>         b->start();
>         update();
> }

No funciona porque 

void QThread::quit()
Tells the thread's event loop to exit with return code 0 (success). Equivalent 
to calling QThread::exit(0).
This function does nothing if the thread does not have an event loop.

Y más que probablemente tu thread no tenga un event loop.

Si lo que quieres es matar el thread (ya te he dicho que no deberias hacerlo) 
tienes 

void QThread::terminate()
Terminates the execution of the thread. 
When the thread is terminated, all threads waiting for the thread to finish 
will be woken up.
Warning: This function is dangerous and its use is discouraged. The thread can 
be terminate at any point in its code path. Threads can be terminated while 
modifying data. There is no chance for the thread to cleanup after itself, 
unlock any held mutexes, etc. In short, use this function only if absolutely 
necessary.

Pues eso, que para 3 slots que tiene QThread no habias leido la documentación 
con suficientes ganas.

Albert

>
> Muchas gracias por su tiempo
>
>
> _________________________________________________________________
> Comparte, crea, disfruta… Descubre todo, en estos vídeos
> http://www.windowslive.es




More information about the Kde-devel-es mailing list