Question

Je rencontre un problème grave lors de l’utilisation des Boost.Spirit et Boost.Thread bibliothèques dans mon application. Cela n'arrive que si j'ai utilisé l'Esprit analyseur pendant la durée de vie du processus à partir du thread principal.

Le crash se produit à la sortie et semble être lié au nettoyage de stockage spécifique aux threads alloué par l'analyseur Spirit. Il se bloque probablement en raison de la séquence des DLL déchargé, car la mémoire spécifique au thread est allouée dans une DLL qui a déjà été déchargé. La DLL Boost.Thread n’est toutefois pas déchargée jusqu’à ce que l’application se ferme elle-même.

Y at-il un moyen pour moi de forcer l’Esprit à nettoyer son fil spécifique stockage, par exemple dans ma dll-main quand je reçois une notification de processus-détacher?

Toutes les solutions / astuces seraient appréciées.

PS! Ma plate-forme et mes paramètres:

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE
Était-ce utile?

La solution

Eh bien, j'ai trouvé une solution de contournement.

Chaque fois que j'utilise l'appel boost :: spirit :: parse, je crée un thread de travail pour l'exécuter, alors que le fil d'appel bloque un appel de jointure avec le fil de travail. Ce n’est pas idéal, mais jusqu’à présent, il semble fonctionner sans aucun effet secondaire.

Je suis toujours intéressé par toute alternative car mon instinct est qu'un fil séparé ne devrait pas vraiment être nécessaire.

Autres conseils

Boost.Spirit n’est qu’en-tête, c’est-à-dire qu’il ne réside pas dans sa propre DLL, ce qui n’est peut-être pas l’ordre de déchargement des DLL, mais un problème différent.

Assurez-vous que l'instance contenant votre analyseur d'esprit est supprimée et ne laisse aucun pointeur en suspens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top