Wie kann man einen Thread pausieren bis ein Button gepressed wird?

  • Antworten:7
Daniel
  • Forum-Beiträge: 99

16.04.2014, 21:28:18 via Website

Moin, kann man dann einfach globale Variable Clicked = false nehmen und den Thread mit while(!Clicked){ Thread.sleep(1); }

public void onClick(){ Clicked = true; }

pausieren, sodass wenn man drückt Clicked = true wird also der Thread dann weiterläuft oder gibt es anderen bessere Methoden?

Antworten
Daniel
  • Forum-Beiträge: 99

16.04.2014, 21:39:24 via Website

Hab mir iwas mit Thread.join() gedacht, aber man muss ja dann nen Thread joinen, aber mit was sonst?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

17.04.2014, 09:17:19 via Website

Du kannst eine CountDownLatch benutzen.

Im Main Thread erzeugen, der andere thread ruft await() auf. Oder du nutzt eine volatile boolean variable, besser ein AtomicBoolean im thread wird ein while auf der boolean durch geführt.

hth, Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Daniel
  • Forum-Beiträge: 99

19.04.2014, 01:52:22 via App

Daniel

Michele

Hallo Daniel.

Hast du dir das schon mal in ruhe angeschaut?:)

http://developer.android.com/reference/java/lang/Thread.html

LG

Oder sprichst du von wait () und notify ? ^^

Das mit dem objekt synchronizen hab ich nicht ganz verstanden. wenn ich das verwenden will, muss ich ja die threads synchronizen oder was genau? kapiere das nicht wirklich, eigentlich nur objekte aber wie geht das bei threads und wrm will er synchen obwohl da nur ein thread ist? ...

Antworten
Daniel
  • Forum-Beiträge: 99

19.04.2014, 01:53:31 via App

nenn mich vlt depp, aber ich hab public void synchronized run() ausprobiert aber dann haben die schleifen iwie nicht funktioniert im thread

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

27.04.2014, 14:39:43 via Website

run braucht man nicht synchronized setzen. Viemehr musst du aufpassen das variablen und Klassen die im thread benutzt werden Nebenläufigkeit unterstützen. Über das Thema gibt es ganze Bücher ;)

Kleiner Tip am rande:

Es ist grundsätzlich immer falsch folgendes zu schreiben:

private boolean isPaused = false;

und dann in der #run Methode auszuwerten!

Es leuchtet evtl nicht direkt ein (weil es meist auch klappt, aber eben nicht zu 100%). Wenn dann muss ein boolean als volatile deklariert werden, also:

private volatile boolean isPaused = false;

Der schreibende Thread (oft UI Thread bei Android) und der der die #run ausführt werden jetzt immer auch den korrekten wert sehen. AtomicBoolean ist eine Alternative dazu ...

hth, mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten