[Kde-devel-es] Matar hilos (QThread) pasado un tiempo sin hacer sleep

José Luis jsanchez at todounix.homeip.net
Wed Aug 19 11:04:48 CEST 2009


Laura Santiago de la Cal wrote:
> La función terminate la tengo habilitada ya que si la pongo fuera del 
> slot me termina el hilo perfectamente, asi que ese no puede ser el 
> problema

¿Llamas a QThread::exec() desde run()?

> Respecto a que matar hilos así derepente es mala práctica normalmente 
> ya lo sé, pero en este caso es lo que deseo hacer ya que una vez que 
> yo los mate me preocuparé de dejar el sistema en el estado que yo 
> deseo, asi que por eso no hay problema.
> El problema es ¿cómo le mato si en un tiempo determinado no ha 
> terminado sin bloquear la cpu con un wait()?

Una manera podría ser guardar en una tabla el TID y la hora 
proporcionada por gettimeofday del momento en que creaste el thread. 
Periódicamente (¿con un thread tuyo creado ex-profeso para ello?) 
compruebas si han transcurrido más de N segundos (o ms o lo que quieras) 
y si se ha pasado lo matas. El problema de ese método es que solo tiene 
en cuenta el tiempo transcurrido real y no el que el thread ha usado de 
CPU (mira getitimer si tienes dudas)

Si usas Linux otro método sería usar la información que hay acerca del 
thread en /proc. Ahora mismo no tengo un Linux a mano, pero seguro que 
la información que necesitas está ahí.


More information about the Kde-devel-es mailing list