Estoy desarrollando una aplicación multiproceso que hace uso de POSIX Threads. Estoy utilizando hilos para hacer un trabajo periódico y para ese propósito estoy usando usleep(3) para suspender la ejecución del hilo. Mi pregunta es cómo puedo cancelar el temporizador usleep() desde el hilo principal, probé pthread_kill(thread, SIGALRM)
pero tiene un efecto global que da como resultado la finalización de la aplicación principal (por defecto). Aquí está mi seudo código:Dormir en un hilo (Hilos C/POSIX)
void threaded_task(void *ptr) {
initialize();
while(running) {
do_the_work();
usleep(some_interval);
}
clean_up();
release_resources();
}
Y aquí es la función seudo que se utiliza para detener (y apagado de precaución) dada hilo del hilo principal:
void stop_thread(pthread_t thread) {
set_running_state(thread, 0); // Actually I use mutex staff
// TODO: Cancel sleep timer so that I will not wait for nothing.
// Wait for task to finish possibly running work and clean up
pthread_join(thread, NULL);
}
Cuál es el manera conveniente de lograr mi objetivo? ¿Tengo que usar variables condicionales o puedo hacerlo usando las variantes de sleep()?
Select es un pequeño sueño idiomática UNIX (y puede ser pinchado con una FIFO) –