Salut,
Un sujet bien présent sur le web ... mais je n'ai pas réussi a trouver de réponse
Bref, voici mon probleme :
Je crée un thread qui lance certaines actions de manière cyclique après une attente, genre
Sauf que si la configuration a changé, le sleep() doit etre interrompu pour lancer les actions.Code:void monthread(){ sleep( temps_d_attente ); plein_de_choses_a_faire(); }
La doc de sleep() indique qu'il attend la période spécifié OU l'arrivé d'un signal ... donc j'ai pensé à
Sauf que la, ca ce termine par unCode:void *slave(){ for(;;){ sleep(30); mes_trucs_a_faire(); } return NULL; /* Avoid warning */ } int main(){ pthread_t thrd; /* Create a detached thread */ pthread_attr_t thread_attr; assert(!pthread_attr_init (&thread_attr)); assert(!pthread_attr_setdetachstate (&thread_attr, PTHREAD_CREATE_DETACHED)); if(pthread_create( &thrd, &thread_attr, slave, NULL )){ perror("Slave creation"); exit(EXIT_FAILURE); } puts("wait 15s"); sleep(15); pthread_kill( thrd, SIGUSR1 ); pause(); return(EXIT_SUCCESS); }
J'ai trouvé sur le web qu'il faut mettre un signal handler, ... ok, mon code devient$ ./TestSignal
wait 15s
Tue Aug 21 15:20:04 2018
User defined signal 1
mais ca ne marche pas mieuxCode:void donothing_handler(){ /* Does strictly nothing ... but avoid the process to be interrupted by * the standard handler */ } void *slave(){ for(;;){ sleep(30); mes_trucs_a_faire(); } return NULL; /* Avoid warning */ } int main(){ pthread_t thrd; signal(SIGSEGV,donothing_handler); /* Create a detached thread */ pthread_attr_t thread_attr; assert(!pthread_attr_init (&thread_attr)); assert(!pthread_attr_setdetachstate (&thread_attr, PTHREAD_CREATE_DETACHED)); if(pthread_create( &thrd, &thread_attr, slave, NULL )){ perror("Slave creation"); exit(EXIT_FAILURE); } puts("wait 15s"); sleep(15); pthread_kill( thrd, SIGUSR1 ); pause(); return(EXIT_SUCCESS); }
Bref, ou est mon erreur.
Sinon, je pourrai passé par les timerfd() et autre eventfd() mais je trouve que vu que je n'attend que 2 chose sur un thread, c'est un peu sortir le marteau pilon pour pas grand chose.
Merci pour vos éclairages
-----