Jump to content

Distance US Listener und Threads Java


Recommended Posts

Hi,

ich benutze in meinem Java Programm den Distanced Reached Listener des Distance US Bricklets. Wenn eine gewisse Entfernung unterschritten ist, dann möchte ich mein Hauptprogramm an genau dieser Stelle unterbrechen und den Code, welche ich in dem distanced Reached Block definiere, ausführen lassen. Das funktioniert soweit. Wenn dann wieder die Entfernung überschritten wird, möchte ich genau an der vorherigen Stelle im Uhrsprungscode weitermachen.

Läuft die distanceReached Funktion in einem zweiten Thread und kann ich von ihr aus den Thread des Hauptprogrammes anhalten und wenn die Entfernung wieder überschritten wird den zweiten Thread wieder weiterlaufen lassen, vielleicht mit einem Listener, der ansprringt wenn die Entfernung größer als ein konfigurierter Threshold ist?

 

Vielen Dank schonmal für die Antwort

 

Bumbleforge 6

Link zu diesem Kommentar
Share on other sites

Hallo Bumbleforge6,

 

Im Buch: "Java ist auch eine Insel" habe ich etwas gefunden das genau das machen würde. den Thread an halten bis du sagt weiter machen .

 

14.3.12 Arbeit niederlegen und wieder aufnehmen *  Zur nächsten ÜberschriftZur vorigen Überschrift

 

Wollen wir erreichen, dass ein Thread für eine bestimmte Zeit die Arbeit niederlegt und ein anderer den schlafenden Thread wieder aufwecken kann, müssten wir das selbst implementieren. Zwar gibt es mit suspend() und resume() zwei Methoden, doch diese Start-Stopp-Technik ist nicht erwünscht, da sie ähnlich problematisch ist wie stop().

 

 

class java.lang.Thread

implements Runnable

 

final void suspend() Lebt der Thread, wird er so lange eingefroren (schlafen gelegt), bis resume() aufgerufen wird.

final void resume() Weckt einen durch suspend() lahmgelegten Thread wieder auf, der dann wieder arbeiten kann.

 

Kann aber nicht sagen wie gut das funktioniert habe es selber noch nie benutz.

 

hoffe das hilft dir weiter.

Gruß Masder

Link zu diesem Kommentar
Share on other sites

Von suspend/resume/stop wird abgeraten, weil du keine Kontrolle hast in welchem Zustand du den Thread anhältst. Der Thread könnte gerade etwas tun wobei du ihn nicht unterbrechen willst.

 

Es gibt verschiedene Alternativen das zu erreichen. Aber meine erste Frage wäre, warum willst du dein Programm so strukturieren? Was ist der Hintergedanke?

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

Ich habe es jetzt gelöst, habe es aber ein wenig anders gemacht :)

 

Ich arbeite jetzt mit einer boolean volatile Variable, welche ich in dem Listener Thread setze.

 

Die Anwendung ist ein Roboter. Ich überprüfe über den Distance Listener, wie groß der Abstand zu Umgebungsobjekten ist. Ist ein gewisser Abstandwert unterschritten, möchte ich die Bewegung des Roboters stoppen und eine Exception werfen, auf welche dann im main Programm reagiert werden kann.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...