Le corps de cette méthode peut être surchargé par l'utilisateur, avec SetRandomizeThisEventClockTime. Il établit et renvoie la date de cet événement, en exploitant les deux arguments prédéfinis dont les valeurs sont la borne inférieure et la borne supérieure de la date. L'usage de cette méthode n'a bien sûr d'intérêt que lorsque les deux bornes sont différentes (utiliser SetOccurrenceClockTime(int) sinon).int myEvent_samplingThisEventClockTime_Body(EventMethod* pM) { int lb = pM->GetIntArgValue(INT_LOW_BOUND_ARGUMENT); int ub = pM->GetIntArgValue(INT_UPPER_BOUND_ARGUMENT); int thisEventClock; ... // détermination aléatoire de la date return thisEventClock; } MyEvent::MyEvent() : Event(MY_EVENT, "myEvent") { ... SetRandomizeThisEventClockTime(myEvent_samplingThisEventClockTime_Body); ... };On rappelle (voir page 'La classe des événements'), que lorsque l'utilisateur n'a pas surchargé ce corps, le moteur de simulation met en oeuvre un tirage uniforme entre borne inférieure et borne supérieure.
Le constructeur RandomizeThisEventClockTime() affecte le symbole de classe RANDOMIZE_THISEVENTCLOCKTIME et le nom de classe "randomizeThisEventClockTime". Ainsi, on peut écrire :
int main(...) { ... Event* pEv = new MyEvent(); int thisEventClock; // le code ci-dessous ... Method* pM = pEv->GetMethod(RANDOMIZE_THISEVENTCLOCKTIME); pM->SetArgValue(INT_LOW_BOUND_ARGUMENT, 0); pM->SetArgValue(INT_UPPER_BOUND_ARGUMENT, 9); thisEventClock = ((EventIntMethod*)pM)->Body((EventMethod*)pM); // ... est équivalent à celui-ci pEv->SetIntArgValue(RANDOMIZE_THISEVENTCLOCKTIME, INT_LOW_BOUND_ARGUMENT, 0); pEv->SetIntArgValue(RANDOMIZE_THISEVENTCLOCKTIME, INT_UPPER_BOUND_ARGUMENT, 9); thisEventClock = pEv->ExecIntMethod(RANDOMIZE_THISEVENTCLOCKTIME); ... SetOccurrenceClockTime(thisEventClock); }