ControlThread und Casting Frage



  • Hallo Leute,

    ich habe zwei Fragen. Ich fang einfach mal an. Zum einen bin ich derzeit nach der Suche wie ein ControlThread(nennt man das so?) aufbaut. Mir ist in größeren Programmen aufgefallen, wenn ein Thread crasht, dass dann das Programm aber immer noch aktiv ist um Beispiel einen Bugreport fertigstellt.

    Ich schätze mal dass das Programm dann aus zwei Threads besteht, oder? Ein ControlThread + Programmthread. Crasht der Programmthread wird der ControlThread mit seinem Bugreport aktiv.

    Und noch ein kleines unangenehmes Problem. Es geht mir tatsächlich nicht in den Kopf was der Unterschied zwischen <static_cast> und <dynamic_cast> ist. Manche Beschreibungen sind zwar verständlich, aber der Groschen will einfach nicht fallen.

    Bisher caste ich auschließlich mittels int *t = (int*)get_pointer();

    Ich danke für eure Hilfe.

    Lg, DonnerCobra



  • DonnerCobra schrieb:

    Hallo Leute,

    ich habe zwei Fragen. Ich fang einfach mal an. Zum einen bin ich derzeit nach der Suche wie ein ControlThread(nennt man das so?) aufbaut. Mir ist in größeren Programmen aufgefallen, wenn ein Thread crasht, dass dann das Programm aber immer noch aktiv ist um Beispiel einen Bugreport fertigstellt.

    Ich schätze mal dass das Programm dann aus zwei Threads besteht, oder? Ein ControlThread + Programmthread. Crasht der Programmthread wird der ControlThread mit seinem Bugreport aktiv.

    Nein. Der "gecrashte" Thread macht das üblicherweise selbst. Ist ja nicht so dass ein Thread "tot umfallen" würde wenn er "crasht".

    Und noch ein kleines unangenehmes Problem. Es geht mir tatsächlich nicht in den Kopf was der Unterschied zwischen <static_cast> und <dynamic_cast> ist.

    Auch doof.



  • hi, danke dir für deine antwort. Wenn der Thread das selber macht, kannst du mir verraten wie er das macht?
    bis dann, Donnercobra



  • Das erledigt das betriebssystem und die libraries dazu.
    Simon



  • ??? ich versteh nur bahnhof, der Bugreport Generator programmiert sich ja kaum von selbst, bzw. Eine Library benutzen kann jeder, ich wollte wissen wie das technisch realisiert wird, bzw. werden kann.

    Natürlich hat das Betriebssystem intern einen Bugreporter, aber der Report geht nicht zu mir als Entwickler, so muss ich also selbst die Fehler abfangen in einem eigenen Bugreporter.



  • z.B. mit SetUnhandledExceptionFilter(..) oder mit __try/__except.
    Und dann jeweils einen Mini Dump erzeugen (mit MiniDumpWriteDump(..)).

    Simon



  • DonnerCobra schrieb:

    ??? ich versteh nur bahnhof, der Bugreport Generator programmiert sich ja kaum von selbst, bzw. Eine Library benutzen kann jeder, ich wollte wissen wie das technisch realisiert wird, bzw. werden kann.

    Indem das OS Funktionen bereitstellt, mittels derer man eigenen Code ausführen lassen kann, wenn irgendwas schief geht.
    Die diversen Fehler die so passieren, führen ja nicht gleich dazu dass garnixmehr geht, sondern sind nur Dinge die man nicht einfach so ausführen kann. Z.b. Zugriffe auf einen Adressbereich, der nicht "mit Speicher hinterlegt" ist, oder Divisionen durch Null oder was auch immer.
    Allerdings kann das OS entweder eine bestimmte Funktion aufrufen, eine bestimmte Exception werfen oder sonstwas machen wenn das passiert.

    Wenn das OS nun die Möglichkeit anbietet, eine bestimmte Funktion ausführen zu lassen, wenn sowas passiert, dann kann man sich genau da einklinken für seinen Bug-Report. Wie man den Bug-Report generiert ist dann wieder eine andere Sache. Im Normalfall nimmt man hier auch diverse Libraries zu Hilfe. Wäre einfach zu aufwendig sowas selbst zu schreiben.


Anmelden zum Antworten