Frage

Ich erlebe einen Absturz während des Boost.Spirit und Boost.Thread mit Bibliotheken in meiner Anwendung. Dies geschieht nur, wenn ich den Geist verwendet haben Parser während der Lebensdauer des Prozesses aus dem Haupt-Thread.

Der Absturz passiert, an der Ausfahrt und erscheint das Clean-up von bezogen werden fädeln spezifischen Speicher vom Geist Parser zugeordnet. Es stürzt wahrscheinlich aufgrund der Folge von der DLLs entladen, da der Faden spezifische Speicher in einer DLL zugeordnet ist dass bereits entladen worden. Die Boost.Thread DLL ist jedoch nicht, bis die Anwendung entladen selbst beendet.

Gibt es eine Möglichkeit für mich, Geist zu zwingen, ihren Faden spezifisch zu reinigen Lagerung, z.B. in meinem dll-main wenn ich eine Prozess-detach Benachrichtigung?

Jede Lösungen / Hinweise geschätzt würde.

PS! Meine Plattform und Einstellungen:

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE
War es hilfreich?

Lösung

Nun, ich fand eine Abhilfe.

Jeder Ort, den ich verwende, um den boost :: spirit :: Parse-Anruf, ich laichen im Grunde einen workerthread um es auszuführen, während der aufrufende Thread auf ein Gespräch mit dem workerthread beitreten zu blockieren. Nicht ideal, aber es scheint so weit ohne Nebenwirkungen zu arbeiten.

Immer noch an irgendwelchen Alternativen wie mein Bauchgefühl ist, dass ein eigener Thread soll nicht wirklich benötigt werden.

Andere Tipps

Boost.Spirit ist Kopf nur, das heißt es nicht in seiner eigenen DLL nicht aufzuhalten, so ist es vielleicht nicht das Abladen Reihenfolge des DLLs, sondern ein anderes Thema.

Stellen Sie sicher, dass die Instanz Ihren Geist Parser enthält gelöscht und lassen keine Zeiger baumeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top