Simscript III/Dictionnaire des instructions/PROCESS

Un livre de Wikilivres.

L’énoncé process[es] est le premier d’un processus ou d’une méthode processus :

Syntaxe :



P doit être un nom de processus ou de méthode processus déclaré dans le préambule (preamble) (rubrique processes). E1,...,En est une liste de variables locales à la routine P (qui devront donc être déclarées par un define ... variables à moins que le type des paramètres n’est été déclaré dans un define … process method) dans lesquelles sont stockées les valeurs des attributs de P dans l’ordre défini par le préambule (preamble) (on peut se passer de cette forme given en référençant directement les attributs par leurs noms tels qu’ils sont définis dans le preamble) et S1, ..., Sm est une liste de paramètres de sortie si la méthode processus est appelée par un énoncé call.


Une méthode processus peut être appelée directement par un énoncé "call" ou peut être ordonnancée à un temps donné par l’énoncé "schedule a". Une méthode processus peut avoir des paramètres de retour (yielding..) lorsqu’elle est appelée par un énoncé "call"; lorsqu’ordonnancée par un "schedule a", les paramètres de sortie sont supprimés.


On entre dans la routine processus (process routine) à l’instant prévu par un énoncé "activate a/schedule a" ou immédiatement après un énoncé "call" et on en sort (c’est-à-dire qu’on retourne au programme horloge ou au programme appelant) sur les énoncés : return, work, interrupt et suspend. On revient dans la routine processus à la fin d’un work/wait (éventuellement interrompu puis réactivé) ou à la suite d’un suspend (réactivé lui aussi) ou d’un resume. Une routine processus est donc ré-entrante et la valeur des variables globales peut avoir changé dans l’intervalle.


Exemple :

methods for the Véhicule class
process method Voyage given Distance, Vitesse_Moyenne 
                   yielding Durée
    define Distance, Vitesse_Moyenne, Durée as double variables;

    define Temps_Début   as double variable;
    let Temps_Début       = time.v ;
    let Vitesse_Courante  = min.f(Vitesse_Moyenne, Vitesse_Maximale) ;   
    wait (Distance / Vitesse_Courante) hours ;
    let Vitesse_Courante  = 0.0 ;
    let Durée             = (time.v - Temps_Début ) * hours.v ;
    let Distance_Voyage   = Distance   ‘‘Mettre à jour lodomètre
end ‘‘Voyage