Boost Threads Exceptions

Hallo,

ich habe folgenden (nicht funktionierenen) Code:

#include
#include
#include
#include

using namespace std;

class foo
{
public:
void fooMeth()
{
cout

hiho

Wie ihr seht würde ich gerne die Boostlibraries benutzen um
einen Thread auszuführen. Das funktioniert so weit auch. Wenn
ich jedoch mit throw einen Fehler auswerfe, wird der überhaupt
nicht zur Kenntnis genommen.
Im Internet steht, das es verschiedene Ansätze gibt die
verfolgt werden, aber keine Lösung.
Stand jemand schon vor dem Problem? Gibt es eine Lösung?

(hast du folgendes gelesen)/(lies folgendes):
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2…
?

mfg TLF

Hi,

danke für den Link, den hatte ich noch nicht gelesen. Das habe ich natürlich gleich nachgeholt und das Programm getestet. Es sieht jedoch so aus, als ob die angesprochenen Änderungen noch nicht in die aktuelle Boost- Release eingegangen sind. Zumindes wird bei mir kein Fehler abgefangen. Die Datei cloneable.hpp existiert bei mir gar nicht.
Hat vielleicht noch jemand eine mögliche Herangehensweise? Meine einzige andere Idee, wäre die Arbeit mit Fehlercodes. Getreu dem Motto: nicht schön, sollte aber selten bleiben.

Torsten

Hiho

Hat vielleicht noch jemand eine mögliche Herangehensweise?
Meine einzige andere Idee, wäre die Arbeit mit Fehlercodes.
Getreu dem Motto: nicht schön, sollte aber selten bleiben.

Die Sache ist doch, das Threads und C++ zu ganz anderen Bereichen gehören. Auf irgendeine Weise mußt du beides koppeln und die Systemdesigner haben Threads schließlich nicht mit dem Hintergrund von C++ entworfen.
Was würdest du denn auf einer Plattform machen, die keine Threads anbietet?

(Ist ja auch ne seltsame Idee:
Variante 1:
du hast einen Funktionspfad als Hauptprogramm und einen als Thread.
Plötzlich bekommst du einen Fehler im Thread und der wird, weil er nicht behandelt wird, ins Hauptprogramm geworfen.
Dort hast du aber vermutlich _sehr_ wenig Möglichkeiten, herauszufinden, was genau passiert ist.

und Variante 2:
Du bekommst die Exceptions, wenn du den Thread joinst.
Das ist aber eigentlich dasselbe, als wenn du einen Rückgabewert hast, also warum der Aufwand?
)

Die Lösung mit den Fehlercodes ist doch relativ praktikabel (die andere wäre so was wie den Teil, der in dem Artikel steht nachzuschreiben und solange zu benutzen, wie die Änderungen, falls sie denn gemacht werden, in Boost offiziell drin sind :wink:.

Außerdem kannst du die Fehlercodes ja jeweils in Exceptions zurückübersetzen.
Also in der Thread-Hauptfunktion:


catch (std::exception)
{
return ERROR_STD;
}
catch (…)
{
return ERROR_OTHER;
}

und in der joinenden Funktion:

errorcode = …;
switch errorcode
{
case ERROR_STD:
throw std::exception („std error“);
case ERROR_OTHER:
throw std::exception („unknown error“);
}

irgendwie so, oder mit noch mehr Informationen.

mfg TLF

Hi,

das schöne an Exceptions ist doch, das ich jedes Objekt auswerfen kann. Ich kann mir also eine Error- Klasse schreiben in der ich gleich den Zeitpunkt des Fehlers, eine Beschreibung und z.B die Methode in der er auftrat speichern. Das ist mit Fehlercodes schwierig.
Aufgrund dieser Informationen hätte ich dann sehr wohl Möglichkeiten den Fehler im Hauptprogramm zu analysieren und dem entsprechend zu handeln.

Daher die Frage.

Mit freundlichen Grüßen
Torsten