Tengo un código similar a:
myThread() { pthread_cleanup_push(CleanupHandler , NULL) while (true) { /* some code here */ } pthread_cleanup_pop(NULL) } static void CleanupHandler(void *arg) { printf("Cleaned\n"); }Pero si termino mi aplicación usando ^C (SIGINT), el controlador de limpieza no funciona. ¿Es eso lo esperado? ¿Cuál es la solución para que CleanupHandler funcione en ^C?
Sí, esto se espera, según la página man, pthread_cleanup_push() se ejecuta en las siguientes 3 circunstancias:
1) When a thread is canceled 2) thread terminates using pthread_exit() 3) when pthread_cleanup_pop() Para solucionar su problema, puede registrar un controlador de señal para SIGINT, desde ese controlador use pthread_exit() o pthread_cancel() para ejecutar su controlador. ¡Espero que esto ayude!