Les événements


o La classe des évéenements
o Les événements prédéfinis
L'occurrence d'un événement provoque l'exécution, ou bien le déclenchement et l'entretien, de processus de changement d'état du système simulé. En conséquence, un système qui ne serait soumis à l'occurrence d'aucun événement resterait dans son état initial. Un événement qui ne comporterait aucune directive sur un processus ne peut être placé dans l'agenda de la simulation.

Les sous-classes d'événements propres au système simulé sont déclarées dans le fichier typiquement nommé UserEvent.h et réalisées dans le fichier UserEvent.cc. Leurs constructeurs contiennent essentiellement l'attribution d'une date d'occurrence, d'un degré de priorité par rapport aux autres événements survenant à cette date, la fabrication de la liste des couples {processus, action\} qui en sont la conséquence, et l'affectation, si besoin est, des méthodes de postconséquence et d'autogénération. Attention ! Plus la valeur du degré de priorité est faible, plus la priorité est forte (un événement de degré 0 est plus prioritaire d'un autre de degré 1). La priorité par défaut est 99.

Les méthodes de postconséquence et d'autogénération sont des instances de la classe EventMethod. Elles sont affectées à l'événement, avec un corps vide, dans le constructeur de base de l'événement. Un corps spécifique leur est ensuite affecté par invocation d'une des méthodes SetPostConsequence, SetGenerateNextEvent, SetUpdateNextEvent et SetDefineNextEventClockTime.

L'utilisateur crée des instances d'événements au moyen d'un constructeur (voir page Constructeurs/Destructeurs) et les range dans l'agenda d'événements. Cette création peut avoir lieu avant le début de la simulation, ou bien pendant la simulation comme partie de l'effet de processus. Le moteur de simulation peut lui-aussi créer des instances de sous-classes de Event, dans trois situations :

En résumé, le cycle de vie d'un événement est le suivant :
  1. création et insertion dans l'agenda
  2. dépilement de l'événement lorsqu'il arrive en la position de tête : current
  3. tentative exécution des directives sur les processus
    • si l'événement est différé (précondition non satisfaite)
      • création d'un événement new par
        • copie des processus de current (en conservant les mêmes méthodes)
        • copie de current (en conservant les mêmes méthodes), avec les processus copiés
      • suppression des processus de current (sans supprimer les méthodes), et suppression de current par RawCopy (sans supprimer les méthodes, lesquelles sont désormais attachées à new)
      • insertion de new dans l'agenda
    • si les directives sur les processus sont exécutées (précondition satisfaite)
      • exécution de la post-conséquence
      • tentative d'autogénération si c'est spécifié
        • si un nouvel événement new a été généré
          • suppression des processus de current (sans supprimer les méthodes), et suppression de current (sans supprimer les méthodes)
          • insertion de new dans l'agenda
        • sinon
          • suppression des processus de current (et de leurs méthodes), et suppression de current (et de ses méthodes)
  4. fin cycle

This page was generated with the help of DOC++.