Comment scheduler deux événements en parallèle en utilisant les structures sigaction et itimerval?
Bonjour,
je voudrais ordonnancer deux événements en parallèle: remplir deux files d'attente simultanément en utilisant un trafic de poisson. J'ai cherché sur Internet et je suis tombée sur les structures sigaction pour appeler une fonction suite à l'émission d'un signal et itimerval pour générer périodiquement ce signal. Le problème est que dans mon cas, ce n'est pas périodique mais les intervalles de temps au bout desquels le signal doit être généré pour chacune des deux files d'attente suit une loi exponentielle. Voici ce que j'ai écrit jusqu'à maintenant, j'aimerais s'il vous plait avoir votre avis:
void Queue_class::SetPoissonTraficFirstQueue(void)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| { // ajout d'un premier paquet à la file
struct sigaction act ;
struct itimerval timer ;
act.sa_handler = this ;
sigempty_set(&act.sa_mask) ;
act.sa_flags = 0 ;
sigaction(SIGALARM, &act,0) ;
timer.it_value.tv_usec = 0 ;
timer.it_value.tv_sec = exponential_variable() ;
timer.it_interval.tv_sec = 0 ;
timer.it_interval.tv_usec = 0 ;
setitimer(ITIMER_REAL, *timer, NULL) ;
}
void Queue_class::SetPoissonTraficSecondQueue(void)
{ // ajout d'un premier paquet à la file
struct sigaction act ;
struct itimerval timer ;
act.sa_handler = this ;
sigempty_set(&act.sa_mask) ;
act.sa_flags = 0 ;
sigaction(SIGALARM, &act,0) ;
timer.it_value.tv_usec = 0 ;
timer.it_value.tv_sec = exponential_variable() ;
timer.it_interval.tv_sec = 0 ;
timer.it_interval.tv_usec = 0 ;
setitimer(ITIMER_REAL, *timer, NULL) ;
} |
Et dans le main, j'appelle les deux fonctions de la sorte:
Code:
1 2 3 4 5 6 7
| int main()
{
Queue_class queue ;
queue.SetPoissonTraficFirstQueue() ;
queue.SetPoissonTraficSecondQueue() ;
// do business
} |
Je voudrais savoir:
1- si c'est une bonne idée d'utiliser l'objet courant "this" dans la méthode sa_handler pour que la fonction s'auto-appelle?
2- si les deux files d'attente se remplissent en même temps comme je le souhaite.
Merci de m'aider.