tengo hilo que duerme durante mucho tiempo, entonces se despierta para hacer algo, luego dormir de nuevo, como esto:cómo terminar un hilo de dormir en pthread?
while(some_condition)
{
// do something
sleep(1000);
}
¿Cómo podría hacer esta salida de rosca con gracia y rápidamente?
Intenté usar pthread_cancel()
, pero los hilos que duermen no se pudieron cancelar. También traté de cambiar la condición del ciclo while, pero tomará mucho tiempo para salir. Y no quiero usar pthread_kill()
, ya que puede matar el hilo cuando está funcionando.
Entonces, ¿hay alguna buena idea?
bueno, creo que me equivoco, sleep() es un punto de cancelación definido por posix.1 – qiuxiafei
Solo una nota - 'pthread_kill' no mata un hilo. Envía una señal a un hilo. Si la acción de esa señal es terminar el proceso (por ejemplo, la acción predeterminada de 'SIGTERM', o la acción no bloqueable de' SIGKILL') entonces terminará * todo el proceso *, no el hilo de destino. Realmente, el único momento en que 'pthread_kill' es útil es si ha instalado un manejador de señal de interrupción y quiere interrumpir un syscall que está bloqueado en un hilo en particular (que podría ser una posible solución a su pregunta). –