Daten ohne Blockierung des Hautprogramm verarbeiten

Status
Nicht offen für weitere Antworten.

Luma

Bekanntes Mitglied
Hio.
Ich hab hier eine kleine Frage an euch. Und zwar schreibe ich gerade an einem Programm, das GPS-Daten (genau, das Global Positioning System) bekommt, verarbeitet und anschließend visualisiert. Ich habe dafür eine Klasse GPSSession die eben die aktuelle Session darstellt und in gewissen Zeitabständen (exakt eine Sekunde) neue GPS-Daten bekommt. Des Weiteren habe ich eine Klasse SurveyComponent, die die GPS Session visualisieren soll. SurveyComponent meldet sich bei GPSSession als GPSSessionChangeListener an. Aber nicht nur diese eine graphische Komponente tut das, sonder noch viele mehr, die jeweils komplexe Visualisierungen bieten.
Jetzt zur eigentlichen Frage: Jedes mal wenn GPSSession neue Daten bekommt werden alle Listener davon informiert (das geschieht über eine Schleife mit einem Iterator) und jeder Listener bekommt ein Objekt der Klasse GPSSessionData in der die aktuellen Eigenschaften der GPSSession (wie Position, Richtung, Bewegungsdauer, Geschwindigkeit et cetera) gespeichert sind. SurveyComponent zeichnet z.B. eine Art Karte. Wird es von GPSSession mit neuen Daten versorgt dann wird die Karte neu gezeichnet – und das dauert einen Moment. Wenn SurveyComponent neu zeichnet muss GPSSession ja solange warten, bis SurveyComponent fertig ist und kann dann erst den nächsten Listener updaten – und dadurch wird ja der Programmablauf geblockt. Das dürfte ein ziemlicher Flaschenhals in meinem Programm werden.
Jetzt hab ich mir überlegt wie man das umgehen könnte. Als nächste Lösung schien mir Multithreading, aber das ist auch so ne Sache. Ich hab mir überlegt wie ich das implementieren soll, und hab mir das dann so gedacht:
Listener wird aufgerufen --> neuer Thread wird erzeugt der die Daten verarbeitet --> Daten werden visualisiert. Dabei wird GPSSession ja nicht geblockt da der Thread ja „parallel“ zum Hauptprogramm weiter läuft. Was mach ich aber wenn Thread 1 noch nicht fertig ist und der Listener wird wieder geupdatet? Einen neuen Thread erstellen, der dann auf den alten wartet? Das ist auch nicht gerade die Lösung, irgendwan ist mein Programm mit dem Zeichnen so weit hinterher, so dass das gezeichnete mit der echten physikalischen Situation (ich hoff das sagt man so; ich mein damit einfach das hier und jetzt) nicht mehr übereinstimmt.

Hat vielleicht jemand eine smartere Lösung?


Gruß und Danke an alle die mir antworten
Lutz
 

Leroy42

Top Contributor
Ich finde die Thread-Lösung schon sinnvoll.

Wenn dann ein Listener benachrichtigt wird, dessen vorhergehende Bearbeitung noch nicht beendet wurde,
gibt es mehrere Möglichkeiten zu reagieren.

1) Der aktuelle Aufruf wird ignoriert ==> aktuellere Daten gehen verloren.
2) Der aktuelle Aufruf wird in einer LIFO-Liste zwischengespeichert und später abgearbeitet.
==> Es kann passieren, daß mehr Aufträge eingehen als abgearbeitet werden.
3) Nur der neueste Aufruf wird zwischengespeichert.
4) Dem laufenden Abarbeitungsthread wird mitgeteilt, daß aktuellere Daten da sind und
er sich schleunigst beenden soll um diese neuen Daten zu verarbeiten.

Ich selbst würde zwischen Lösung 3 und 4 schwanken. Wobei 4 sicher nicht ganz so einfach
zu realisieren ist.
 

Luma

Bekanntes Mitglied
Hmm...
GUI-Programmierung ist immer das schlimmste. Der eigentliche Code ist ja schon ziemlich kompliziert und dann auch noch der Aufwand mit dem Visualisieren...

3) Nur der neueste Aufruf wird zwischengespeichert.
Das ist doch genau das gleich wie bei 1), oder nicht? Korrigier mich bitte, wenn ich was falsch verstanden habe.

Auf jeden Fall mal Danke für deine Antwort.
Ich probier als erstes die Queue (ich hoff das schreibt man so). Das Problem ist halt, dass auf langsameren Computern es wirklich dazu kommt, dass die Queue ständig wächst. Ich werd das testen.

Gibt's vielleicht noch ein paar andere Vorschläge? Bin für jeden Dankbar.

Gruß
Lutz
 

Ilja

Bekanntes Mitglied
dieser Flaschenhalst istimmer ein Problemm und eher eine Voraussetzung an das Verarbeitende System.
Die Software hat nicht umsonst eine Mindestvoraussetzung!

Du könntest noch folgendes Probieren:
ordne dem Zeichnungs-thread die höchste Priorität zu - die meißten Betriebssystemme unterstützen dies. So hättest du den hals etwas geweitet!

die Queue ist nur bedingt eine lösung, denn wenn das system die zeichnung im DURCHSCHNITT nicht < 1s fertigstellen kann, wird diese Queue immer größer und das Programm umso langsammer! Wenn du <1s im schnitt erwartest, so ist die queue die besste lösung!
Erweitere die Queue um eine Prüfung der anzahl der Elemente! Sobald diese >5 sind z.b., sollen alle bis auf das letzte Element gelöscht werden - somit kannste einen induktiven Stau überspringen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
padde479 Collections Daten in Dreiecksform Allgemeine Java-Themen 13
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
A Hartgecodete Daten auslagern Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
S Webservices für binäre Daten? Allgemeine Java-Themen 5
OnDemand Daten in RAM zwischenspeichern oder lieber aus DB holen? Allgemeine Java-Themen 24
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
S Entities aus XML - Daten. Allgemeine Java-Themen 1
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
C Daten für Klassifikationsverfahren gewinnen Allgemeine Java-Themen 6
J Daten von Quelltext Allgemeine Java-Themen 5
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
J Jasper Reports - Daten vom Hoster Allgemeine Java-Themen 2
kodela Daten während Laufzeit zugriffsbereit Allgemeine Java-Themen 15
J Millisekunde zwischen 2 Daten Allgemeine Java-Themen 6
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
R Android Daten online senden Allgemeine Java-Themen 0
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
K Gespeicherte Daten von einer LinkedList auf vier LinkedList verteilen Allgemeine Java-Themen 6
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
OnDemand Desktop-Applikation schreiben, wie daten persistent? Allgemeine Java-Themen 9
S Erste Schritte Fehlender Gedanken-Ansatz bei Interpretation von Daten Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
D Best Practice Login-Daten: Wie am besten abrufen? Allgemeine Java-Themen 6
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
J Serial Port Daten empfangen Allgemeine Java-Themen 5
H Daten via COM Schnittstelle erhalten Allgemeine Java-Themen 2
J Daten persistent speichern Allgemeine Java-Themen 14
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
G Daten aus Website auslesen Allgemeine Java-Themen 7
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
O Serial Port Daten als Tastaturanschlag senden Allgemeine Java-Themen 0
N Zeitabstand zwischen 2 Daten(Mehrzahl von Datum) Allgemeine Java-Themen 3
T Input/Output Daten in eine Datei schreiben Allgemeine Java-Themen 4
Z daten bindung Allgemeine Java-Themen 1
A Datentypen Gregorian Calendar - 2 Daten sind gleich?? Allgemeine Java-Themen 3
L Vergleich-Xml-Daten Allgemeine Java-Themen 3
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
A Daten in Formularen/Vorlagen erstellen und ausdrucken Allgemeine Java-Themen 3
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
Todesbote Excel Blattschutz aufheben und Daten einfügen Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
OnDemand PC identifizieren / Daten auslesen Allgemeine Java-Themen 15
G Combobox füllen mit daten aus einer Tabelle Allgemeine Java-Themen 4
J Maven .war enthält veraltete Daten Allgemeine Java-Themen 3
N Daten aus Jar laden Allgemeine Java-Themen 10
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
T Daten effizient verwalten Allgemeine Java-Themen 4
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
R Daten aus DB auslesen in ein formular (JSP) Allgemeine Java-Themen 13
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
H OOP Daten über TCP Allgemeine Java-Themen 5
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
D Daten eines User auslesen. Allgemeine Java-Themen 5
B Input/Output Einbinden von Daten in Java Allgemeine Java-Themen 3
L Einbinden von Daten in ausführbare Jar Allgemeine Java-Themen 6
N Methoden Einzelne Daten aus "Person" auslesen Allgemeine Java-Themen 3
R SerialPort auslesen und Daten verarbeiten Allgemeine Java-Themen 23
ARadauer Wo liegen die Daten der Preferences Klasse Allgemeine Java-Themen 3
Madlip Erste Schritte Java speichert Daten im Programm?!? Allgemeine Java-Themen 9
S JDialog Daten ins JFrame übergeben Allgemeine Java-Themen 5
F Threads synchronisierung des Zugriffes auf daten Allgemeine Java-Themen 4
O Amazon S3 Anmelden / Daten downloaden Allgemeine Java-Themen 2
A Daten aufbereiten Allgemeine Java-Themen 11
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
L Speichern von Daten in JKS Allgemeine Java-Themen 5
K JFreeCharts - Dummy für fehlende Daten Allgemeine Java-Themen 6
M Daten aus doc, pdf .... auslesen Allgemeine Java-Themen 12
Z Daten von einer Klasse in eine andere übertragen Allgemeine Java-Themen 8
A Login-Daten Formular automatisch ausfüllen Allgemeine Java-Themen 10
C Daten speichern und verwalten Allgemeine Java-Themen 3
Z Daten aus einer Internetseite auslesen? Allgemeine Java-Themen 2
E BlueJ Daten in Textdatei schreiben Allgemeine Java-Themen 21
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
ruutaiokwu META-INF-daten bei ungepackten library-projekten während der entwicklung mit einbeziehen...? Allgemeine Java-Themen 2
K Server Daten Visualisieren Allgemeine Java-Themen 3
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
L Sicherstellen das 2x die gleichen Daten unter bestimmten Keys enthalten sind. Allgemeine Java-Themen 6
A XML-Daten komprimieren Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben