MATSIM
core
mobsim
framework
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
}
org.matsim.core.mobsim.framework.PlayPauseSimulationControlI
Definition:
PlayPauseSimulationControlI.java:25
org.matsim.core.mobsim.framework.PlayPauseSimulationControlI.play
void play()
org.matsim.core.mobsim.framework.PlayPauseSimulationControlI.pause
void pause()
org.matsim.core.mobsim.framework.PlayPauseSimulationControlI.doStep
void doStep(int time)
Generated by
1.8.13