Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++: Multithreading

Aufgabe zu std::promise und std::future

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Der Promise soll in dieser Aufgabe eine Ausnahme werfen, die im Future aufgefangen wird. Los geht's!
02:57

Transkript

Ein Promise kann nicht nur einen Wert oder eine Benachrichtigung schicken. Ein Promise kann auch eine Ausnahme schicken. Genau dazu sollen Sie ein Übungsbeispielchen machen. Der Promise setzt eine Ausnahme, die Sie in Future fragen. Ich habe hier eine weitere Information zum Promise und zum Future. Dann komme ich zur Lösung der Aufgabe. In dieser Lösung verwende ich wieder den Promise, der zwei Werte dividiert, und was kann auch natürlich passieren, wenn man zwei Werte dividiert, - man kann 20 durch 0 dividieren. Und das ist not a number, sprich da wird mir die Ausnahme geworfen, und das Programm stürzt ab, wenn Sie nichts tun. Mein Programm soll aber was tun. Mein Programm soll die Ausnahme auffangen. Das tu ich mithilfe des Futures. Ganz von Anfang, mein Promise hier, den int zurückgibt. Den Promise benütze ich, um mein Future zu erzeugen. Dann führe ich die Funktion div aus. Ich muss genau sein, ich führe das Funktionsobjekt div aus, schiebe den Promise rein, mit den zwei Argumenten 20 und 0. Was macht div? Schauen wir uns genau an. Hier habe ich den Klammer-Operator wieder überladen. Der Klammer-Operator erhält den Promise als Value per Reference und die 2 Argumente a und b. Im Fall, dass b gleich 0 ist, XXX sozusagen, schmeiße ich eine Ausnahme von Typ runtime_error mit der Nachricht „illegal division by zero“. Wenn b nicht 0 ist, führe ich die Division durch b aus. Hier catche ich die Ausnahme, die hier oben werfe. Und mache ich sie zum Zurückgabetyp meines Promise. IntPromise.set_exception ist Zurückgabetyp meines Promise. Und an die Exception komme ich ran, indem ich sage std::current_exception(). Was macht jetzt der Future? Der Future muss diesmal ein bisschen intelligenter sein. Er macht jetzt sein ganzes Handling in einem try-catch Block. Im try-Block versucht er das Ergebnis zu erhalten, schlägt das fehl, kommt der catch-Block zum Zuge. Hier fange ich die Runtime Exception oder Ausnahme. Und schreibe die Nachricht e.what() der Ausnahme auf std::cout. Hier ändert sich nichts, der Erzeuger-Thread wartet, bis sein Kind-Thread mit seiner Arbeit fertig ist. Jetzt möchte ich das Programm ausführen. Und Sie sehen, genau das, was wir erwarten. Die Ausnahme, die ich hier geschmissen habe, wird über den Thread ganz hinaus zum Future-Wert propagiert. Im catch-Block wird sie ausgegeben.

C++: Multithreading

Lernen Sie die High-Level Threading-Schnittstelle in C++ kennenb und nutzen, die Sie in Form von Threads, Tasks, Locks und Bedingungsvariablen zur Anwendung bringen.

2 Std. 40 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:16.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!