J'ai le code suivant que j'espérerais attendre 2 secondes, puis attendre 5 secondes dans une boucle.aide avec le problème setitimer/signal
Il y a une raison pour laquelle je n'utilise pas le it_interval pour refaire le timer.
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#include <semaphore.h>
sem_t sem;
void sighdlr(int sig)
{
printf("sighdlr\n");
sem_post(&sem);
}
int main(int c, char *v[])
{
signal(SIGALRM, sighdlr);
struct itimerval itv;
struct tm tm;
time_t now;
while(true)
{
itv.it_value.tv_sec = 2;
itv.it_value.tv_usec = 0;
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, NULL);
sem_wait(&sem);
now = time(NULL);
localtime_r(&now, &tm);
fprintf(stderr, "%02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
itv.it_value.tv_sec = 5;
itv.it_value.tv_usec = 0;
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, NULL);
sem_wait(&sem);
now = time(NULL);
localtime_r(&now, &tm);
fprintf(stderr, "%02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
}
}
Il produit la sortie suivante
sighdlr
15:32:50
15:32:50
sighdlr
15:32:52
15:32:52
sighdlr
15:32:54
15:32:54
sighdlr
15:32:56
15:32:56
sighdlr
15:32:58
15:32:58
sighdlr
15:33:00
15:33:00
Je ne peux pas comprendre pourquoi il n'attend pas les 5 secondes pour la deuxième minuterie.
Des idées?
Thx M.