IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Comment scheduler deux événements en parallèle en utilisant les structures sigaction et itimerval?


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 1
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    732
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 732
    Par défaut
    Bonjour,

    Je doute que ce code compile. De mémoire sa_handler doit prendre un pointeur sur fonction. this est un pointeur sur votre objet, normalement il faut le passer comme "user data". (je ne sais même pas s'il y en a dans un sigaction, sinon ça sera une statique)
    Toujours de mémoire, je crois que les handlers de signaux sont exécutés sous forme d'interruption, donc c'est pas vraiment parallèle, mais pas loin.

    Concernant le sujet initial, puisque personne n'a répondu pour l'instant, et puisque ça semble être un exercice pour vos études (télécoms ?), peut-être devriez-vous demander quelques pistes à vos collègues/profs ?

    Pour finir, si vous restez sur ce type de fonctions, vous aurez plus de chance de trouver une réponse dans un forum C ou développement système.

Discussions similaires

  1. Comment créer deux surfaces parallèles?
    Par sabrinacorse dans le forum LabVIEW
    Réponses: 5
    Dernier message: 23/08/2009, 10h57
  2. Réponses: 5
    Dernier message: 13/02/2008, 10h15
  3. Réponses: 0
    Dernier message: 11/12/2007, 11h42
  4. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo