Nous avons une fonction qui à un seul thread appelle (on appelle cela le thread principal). Dans le corps de la fonction nous frayer plusieurs threads de travail à faire CPU intensive de travail, d'attente pour tous les fils à la fin, puis retourner le résultat sur le thread principal.
Le résultat est que l'appelant peut utiliser la fonction naïvement, et à l'intérieur il va rendre l'utilisation de plusieurs cœurs.
Tout bon jusqu'ici..
Le problème que nous avons est de traiter des exceptions. Nous ne voulons pas des exceptions sur les threads de travail pour le plantage de l'application. Nous voulons que l'appelant de la fonction pour être en mesure de les rattraper sur le thread principal. Nous devons attraper les exceptions sur les threads de travail et les propager à travers le thread principal pour poursuivez le déroulement à partir de là.
Comment pouvons-nous faire cela?
Le mieux je pense est de:
- Attraper toute une série d'exceptions sur notre threads de travail (std::exception et quelques-uns de nous-mêmes).
- Noter le type et le message de l'exception.
- Avoir un correspondant de l'instruction switch sur le thread principal qui renvoie exceptions de ce type a été enregistré sur le thread de travail.
Cela a l'inconvénient de ne supportant un ensemble limité de types d'exception, et aurait besoin d'une modification chaque fois que de nouveaux types d'exceptions ont été ajoutées.