Quiero hacer que un hilo duerma por un tiempo indefinido. La razón por la que quiero hacer esto es porque mi programa solo toma medidas cuando recibe una señal y no tiene nada que hacer en el hilo primario. Por lo tanto, todo el procesamiento se realiza dentro del controlador de señal. ¿Cómo puedo dormir por un tiempo indefinido?Dormir un hilo por un tiempo indefinido en Linux
Respuesta
Creo que usted está buscando para la función pause
:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/pause.html
Se podría hacer algo como: for (;;) pause();
Sí, la pausa es la única. – MarkR
No necesita un bucle for infinito, simplemente use 'pause();'. – boramalper
@boramalper: Los bucles son necesarios porque 'pausa 'regresa a las señales. –
Si solo está haciendo algo en otro hilo, simplemente llame al pthread_join
en ese hilo y bloqueará prácticamente "para siempre". Puede lograr el mismo efecto usando una variable de condición.
Estoy de acuerdo con Chris. Está sugiriendo que tengas el hilo principal de espera para que el (los) hilo (s) hijo (s) salga (n) y luego salga solo. Esto no solo hará lo que quieras, sino que evitará zombis si el hilo hijo muere o es asesinado. –
¡Esa es una solución brillante, Chris! ¡Gracias! – MetallicPriest
Los hilos no se pueden matar, y no se convierten en "zombies" en el mismo sentido que los procesos. Si no le interesa unir un hilo, simplemente sepárelo para comenzar, de modo que no tenga que preocuparse por limpiar el descriptor del hilo. –
¡Utilice semáforos!
Haga que su hilo se bloquee en un semáforo usando sem_wait
. Una vez que necesite despertar la señal de su hilo, utilice el semáforo usando sem_post
desde otra secuencia.
POSIX proporciona la función sigsuspend
a esperar una señal. (Como se menciona en otra respuesta, también funciona pause
)
- 1. Dormir en un hilo de C# agrupado
- 2. Dormir en un hilo (Hilos C/POSIX)
- 3. Cómo dormir un hilo de Boost C++
- 4. cómo terminar un hilo de dormir en pthread?
- 5. Cómo dormir o pausar un PThread en c en Linux
- 6. Intentando dormir bien en Linux
- 7. Dormir un hilo hasta que se atienda un evento en otro hilo
- 8. Dormir un hilo de refuerzo durante algunos nanosegundos
- 9. Alternativa al hilo. ¿Dormir en C#?
- 10. Dormir por una duración exacta
- 11. ¿Por qué no puedes dormir sosteniendo un spinlock?
- 12. Un hilo por cliente. ¿Realizable?
- 13. hilo de Linux suspendido por señal en tiempo real cuando se ejecuta en eclipse
- 14. Cómo administrar un proyecto cuando está congelado/retrasado por un tiempo indefinido
- 15. ¿Procesaría más hilos en Linux tener más tiempo de CPU que procesar con un hilo?
- 16. Cambiar UID/GID solo de un hilo en Linux
- 17. Detener un hilo después de un cierto período de tiempo
- 18. ¿Cómo suspender un hilo de Java por un período de tiempo pequeño, como 100 nanosegundos?
- 19. Pausar un boost :: thread por tiempo ilimitado
- 20. Dormir tarea (System.Threading.Tasks)
- 21. ¿Un DAO por hilo o DAO con hilo?
- 22. ¿hay alguna manera de dormir() en un procedimiento almacenado?
- 23. ¿Cómo dormir 10 segundos antes de ejecutar un comando de Linux?
- 24. Limitar el tiempo que un programa se ejecuta en Linux
- 25. ¿Por qué querría comenzar un hilo "suspendido"?
- 26. ¿Tomcat crea un hilo por usuario?
- 27. Engendrando un hilo en python
- 28. ¿Puedo ejecutar un hilo dentro de un hilo en java?
- 29. ¿Seguir el tiempo que toma un comando en UNIX/LINUX?
- 30. SensorEventListener en un hilo separado
¿Está utilizando hilos o solo señales? Si hilos, ¿cuáles son los otros hilos y qué están haciendo? (Si está mezclando señales e hilos hay algo de trabajo extra que hacer, pero si solo está usando "hilo primario" para indicar la parte del programa que no está ejecutándose en un manejador de señal, eso es diferente e implica una diferencia respuesta) – Random832