MATSIM
PlayPauseSimulationControlI.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.* *
3  * *
4  * *********************************************************************** *
5  * *
6  * copyright : (C) 2008 by the members listed in the COPYING, *
7  * LICENSE and WARRANTY file. *
8  * email : info at matsim dot org *
9  * *
10  * *********************************************************************** *
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * See also COPYING, LICENSE and WARRANTY file *
17  * *
18  * *********************************************************************** */
19 package org.matsim.core.mobsim.framework;
20 
25 public interface PlayPauseSimulationControlI {
26 /* Hallo Kai,
27 
28  auch “main” läuft in einem Thread, welcher angehalten werden kann.
29 
30  Wenn man etwas stoppen und weiterführen will, braucht es einfach einen zweiten Thread, welcher nicht gestoppt wird, und der
31  dann den Befehl zum weiter machen geben kann. Das bedeutet, man könnte entweder:
32 
33  (1) Die QSim in einem Thread packen und aus dem Main-Thread (oder einem anderen, dritten Thread) heraus
34  doStep()/notifyAll() aufrufen.
35 
36  oder:
37 
38  (2) Den Steuerungs-Teil in einen Thread packen, und die QSim im Main-Thread lassen. So wird der Main-Thread angehalten.
39  Ist technisch gesehen absolut gleichwertig, da der Main-Thread in Java auch einfach ein normaler Thread ist. (die JVM
40  beendet normalerweise, sobald kein Thread (resp. kein Daemon-Thread) mehr läuft. Das heisst, man könnte im Main-Thread
41  auch einfach einen anderen Thread starten und dann die ganze Arbeit da drin machen, und die main-Methode gleich wieder
42  verlassen. Das Programm würde weiterlaufen, bis der gestartete Thread beendet).
43 
44  Da in der GUI-Programmierung sowieso sehr viel mit Threads gearbeitet werden muss (das UI sollte bei längeren
45  Berechnungen ja nicht blockieren), war es beim OTFVis wohl sinnvoller/einfacher, die QSim im Main-Thread zu lassen und die
46  Steuerung separat zu haben. Zudem: sobald man ein Swing-GUI erstellt, läuft dieses in einem eigenen Thread (dem
47  sogenannten Events Dispatch Thread). Das heisst, es muss gar nicht explizit ein Thread erzeugt werden, ein Swing-Fenster
48  anzeigen mit Buttons drin, und schon werden alle Button-Clicks in einem separaten Thread ausgeführt.
49 
50  Für allgemeine Anwendungsfälle (also auch ohne GUI) könnte es aber einfacher sein, wenn die PlayPauseSimulation in
51  einem eigenen Thread abläuft, und man die Steuerung dann quasi aus dem Main-Thread machen könnte. Ansonsten müssten
52  die Anwender selber einen eigenen Thread erzeugen, um die Simulation zu steuern, was zwar machbar, aber komplexer,
53  fehleranfälliger und weniger intuitiv ist.
54 
55  Gruss
56  Marcel
57 */
58 
59  public void pause();
60 
61  public void play();
62 
63  void doStep(int time);
64 
65 }