Wie führt man eine Basismethode bei 2 Aufrufen aus?
Posted: 14 Jan 2025, 12:17
Ich habe ein Anylogic-Projekt (aber ich habe das gleiche Problem in Java). Ich habe 2 Klassenimplementierungen und dementsprechend zwei Codestellen (Ereignisse), von denen ich eine Basismethode aufrufen muss. Diese Basismethode sollte nach jedem Ereignisaufruf ausgeführt werden. Das Problem ist, dass ich die Basismethode nur einmal für eine beliebige Anzahl von Ereignisaufrufen gleichzeitig ausführen muss.
Zum Beispiel. Ich habe 2 Klassen mit dem Namen Enter. Jede Enter-Klasse verfügt über ein Ereignis „OnEnterSpeedChange“. Diese beiden Enter-Klassen sind einer Hauptklasse mit dem Namen AllEnter zugeordnet. AllEnter verfügt über ein eigenes Ereignis „OnEnterSpeedChange“, das jedes Mal, wenn mindestens einer der Enter ein Ereignis „OnEnterSpeedChange“ ausführt, aufruft. Wenn jedoch ein Ereignis „OnEnterSpeedChange“ zur gleichen Modellzeit die erste Enter-Klasse und die zweite Enter-Klasse aufruft, dann ruft jede seiner Methoden die Basismethode auf, und die Basismethode ruft auch zweimal auf. Und ich muss es nur einmal machen!
Wie kann ich es lösen?
P.S. Ich habe einen Agenten (Agent1), auf dem sich das Ventilelement befindet. Ich platziere diesen Agenten in einem anderen Agenten 2 (im Wesentlichen ziehe ich ihn in den Arbeitsbereich eines anderen Agenten). Nachdem ich Agent 1 auf Agent 2 gezogen habe, erstelle ich eine Population von Agent 1. Jedes Element der Agent1-Population verfügt über ein internes Ereignis (das über Valve kommt) OnSpeedChange. Ich habe eine entsprechende Methode für Agent2: Jedes Mal, wenn sich die Geschwindigkeit eines Elements der Population von Agent1 ändert, muss die Methode auf Agent2 ausgeführt werden. Da jedoch Geschwindigkeitsänderungen bei Agent1 zur gleichen Modellzeit auftraten (z. B. zu Beginn der Simulation, als die Geschwindigkeit zunächst = 0 war und dann größer als 0 wurde), sollte eine ähnliche Methode für Agent2 nur einmal aufgerufen werden.
Zum Beispiel. Ich habe 2 Klassen mit dem Namen Enter. Jede Enter-Klasse verfügt über ein Ereignis „OnEnterSpeedChange“. Diese beiden Enter-Klassen sind einer Hauptklasse mit dem Namen AllEnter zugeordnet. AllEnter verfügt über ein eigenes Ereignis „OnEnterSpeedChange“, das jedes Mal, wenn mindestens einer der Enter ein Ereignis „OnEnterSpeedChange“ ausführt, aufruft. Wenn jedoch ein Ereignis „OnEnterSpeedChange“ zur gleichen Modellzeit die erste Enter-Klasse und die zweite Enter-Klasse aufruft, dann ruft jede seiner Methoden die Basismethode auf, und die Basismethode ruft auch zweimal auf. Und ich muss es nur einmal machen!
Wie kann ich es lösen?
P.S. Ich habe einen Agenten (Agent1), auf dem sich das Ventilelement befindet. Ich platziere diesen Agenten in einem anderen Agenten 2 (im Wesentlichen ziehe ich ihn in den Arbeitsbereich eines anderen Agenten). Nachdem ich Agent 1 auf Agent 2 gezogen habe, erstelle ich eine Population von Agent 1. Jedes Element der Agent1-Population verfügt über ein internes Ereignis (das über Valve kommt) OnSpeedChange. Ich habe eine entsprechende Methode für Agent2: Jedes Mal, wenn sich die Geschwindigkeit eines Elements der Population von Agent1 ändert, muss die Methode auf Agent2 ausgeführt werden. Da jedoch Geschwindigkeitsänderungen bei Agent1 zur gleichen Modellzeit auftraten (z. B. zu Beginn der Simulation, als die Geschwindigkeit zunächst = 0 war und dann größer als 0 wurde), sollte eine ähnliche Methode für Agent2 nur einmal aufgerufen werden.