12.01.2014 Aufrufe

2-up - ETH Zürich

2-up - ETH Zürich

2-up - ETH Zürich

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Stop is Being Deprecated (4)<br />

Die alternative Methode, einen Thread abzubrechen, besteht darin, im Thread<br />

selbst auf Unterbrechungsanforderungen zu reagieren. So könnte beispielsweise<br />

eine Membervariable cancelled eingeführt und beim Initialisieren des<br />

Thread auf false gesetzt werden. Mit Hilfe einer Methode cancel kann der<br />

Wert der Variable zu einem beliebigen Zeitpunkt auf true gesetzt werden.<br />

Aufgabe der Bearbeitungsroutine in run ist es nun, an geeigneten Stellen<br />

diese Variable abzufragen und für den Fall, dass sie true ist, die Methode run<br />

konsistent zu beenden.<br />

Dabei darf cancelled natürlich nicht zu oft abgefragt werden, um das Programm<br />

nicht unnötig aufzublähen und das Laufzeitverhalten des Thread nicht<br />

zu sehr zu verschlechtern. Andererseits darf die Abfrage nicht zu selten erfolgen,<br />

damit es nicht zu lange dauert, bis auf eine Abbruchanforderung reagiert<br />

wird. Insbesondere darf es keine potentiellen Endlosschleifen geben, in den<br />

cancelled überha<strong>up</strong>t nicht abgefragt wird. Die Kunst besteht darin, diese gegensätzlichen<br />

Anforderungen sinnvoll zu vereinen.<br />

776<br />

Thread-Steuerung mittels stop und resume<br />

• Trotzdem sind stop, suspend und resume aber ganz bequem:<br />

class Spinner extends Thread // "endloser" Thread<br />

...<br />

void HitCancel() {<br />

Spinner.suspend(); // anhalten<br />

if (askYesNo("Wirklich abbrechen?","ja","nein"))<br />

Spinner.stop(); // abbrechen<br />

else<br />

Spinner.resume(); // weiter<br />

}<br />

...<br />

777<br />

321

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!