Cette méthode n'est pas utilisée par le moteur de simulation, mais seulement, et éventuellement, dans le code de l'application, plus précisément dans l'une ou l'autre des méthodes d'autogénération d'un événement. Le corps, affecté par SetRandomizeNextEventClockTime, établit et renvoie la date d'un événement autogénéré, en exploitant les deux arguments prédéfinis dont les valeurs sont la borne inférieure et la borne supérieure de la date.int myEvent_samplingNextEventClockTime_Body(EventMethod* pM) { int lb = pM->GetIntArgValue(INT_LOW_BOUND_ARGUMENT); int ub = pM->GetIntArgValue(INT_UPPER_BOUND_ARGUMENT); int nextEventClock; ... // détermination aléatoire de la date return nextEventClock; } MyEvent::MyEvent() : Event(MY_EVENT, "myEvent") { ... SetRandomizeNextEventClockTime(myEvent_samplingNextEventClockTime_Body); ... };On rappelle (voir page 'La classe des événements'), que lorsque l'utilisateur n'a pas surchargé ce corps, ou que l'utilisateur n'utilise pas cette méthode dans son code, le moteur de simulation met en oeuvre un tirage uniforme entre borne inférieure et borne supérieure quand elles sont spécifiées. Quand elles ne sont pas spécifiées, l'utilisateur utilise alors le service SetOccurrenceClockTime(int).
Le constructeur RandomizeNextEventClockTime() affecte le symbole de classe RANDOMIZE_NEXTEVENTCLOCKTIME et le nom de classe "randomizeNextEventClockTime". Ainsi, on peut écrire :
bool pingEvent_generateNextEvent_Body(EventMethod* pM) { bool succeed = TRUE; Event* pCurrentEvent = pM->DescribedEvent(); Event* pNextEvent = new PongEvent(); int nextEventClock; // le code ci-dessous ... Method* pM = pCurrentEvent->GetMethod(RANDOMIZE_NEXTEVENTCLOCKTIME); pM->SetArgValue(INT_LOW_BOUND_ARGUMENT, 0); pM->SetArgValue(INT_UPPER_BOUND_ARGUMENT, 9); nextEventClock = ((EventIntMethod*)pM)->Body((EventMethod*)pM); // ... est équivalent à celui-ci pEv->SetIntArgValue(RANDOMIZE_NEXTEVENTCLOCKTIME, INT_LOW_BOUND_ARGUMENT, 0); pEv->SetIntArgValue(RANDOMIZE_NEXTEVENTCLOCKTIME, INT_UPPER_BOUND_ARGUMENT, 9); thisEventClock = pEv->ExecIntMethod(RANDOMIZE_NEXTEVENTCLOCKTIME); ... pNextEvent->SetOccurrenceClockTime(nextEventClock); ... }