Pregunta

Estoy experimentando un bloqueo al usar Boost.Spirit y Boost.Thread bibliotecas en mi aplicación. Esto solo sucede si he usado el Espíritu analizador durante la vida útil del proceso desde el hilo principal.

El bloqueo ocurre en la salida y parece estar relacionado con la limpieza de almacenamiento específico de subprocesos asignado por el analizador Spirit. Probablemente se está bloqueando debido a la secuencia de las DLL que están descargado, ya que la memoria específica del hilo se asigna dentro de una DLL eso ya ha sido descargado. Sin embargo, la DLL Boost.Thread no se descarga hasta que la aplicación se cierre.

¿Hay alguna manera de obligar a Spirit a limpiar su hilo específico almacenamiento, p. en mi dll-main cuando recibo una notificación de separación de proceso?

Cualquier solución / sugerencia sería apreciada.

PS! Mi plataforma y configuración:

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE
¿Fue útil?

Solución

Bueno, encontré una solución alternativa.

En todos los lugares donde uso la llamada boost :: spirit :: parse, básicamente engendro un hilo de trabajo para ejecutarlo, mientras que el hilo de llamada se bloquea en una llamada de unión con el hilo de trabajo. No es ideal, pero parece estar funcionando sin efectos secundarios hasta ahora.

Todavía estoy interesado en cualquier alternativa, ya que mi intuición es que realmente no se necesita un hilo separado.

Otros consejos

Boost.Spirit es solo de encabezado, es decir, no reside en su propio dll, por lo que tal vez no sea el orden de descarga de dlls sino un problema diferente.

Asegúrese de que la instancia que contiene su analizador de espíritu se elimine y no deje punteros colgantes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top