Pergunta

Eu estou experimentando um acidente durante o uso do Boost.Spirit e Boost.Thread bibliotecas em meu aplicativo. Isso só acontece se eu ter usado o Espírito analisador durante a vida útil do processo a partir do thread principal.

O acidente acontece na saída e parece estar relacionado com a limpeza-of fio de armazenamento específico atribuído pelo analisador Espírito. É provavelmente bater devido à sequência da qual são DLLs descarregado, como a memória segmento específico é alocado dentro de uma DLL que já foi descarregado. O Boost.Thread DLL no entanto, não é descarregado até que o próprio aplicativo sai.

Existe uma maneira de me forçar Espírito para limpar a sua específica fio armazenamento, por exemplo na minha dll-main quando eu receber uma notificação processo de desanexação?

Todas as soluções / sugestões seria apreciada.

PS! Minha plataforma e configurações:

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE
Foi útil?

Solução

Bem, eu encontrei uma solução alternativa.

Cada lugar eu uso o boost :: espírito :: chamada de análise, eu basicamente gerar um WorkerThread para executá-lo, enquanto o segmento de chamada está bloqueando uma junção chamada com o WorkerThread. Não é o ideal, mas parece estar a trabalhar sem quaisquer efeitos colaterais até agora.

Ainda interessado em qualquer alternativas como a minha intuição é que um segmento separado realmente não deve ser necessário.

Outras dicas

Boost.Spirit é header-only, ou seja, ele não reside em sua própria dll, talvez por isso, não é o fim descarregamento de DLLs, mas sim uma questão diferente.

Certifique-se a instância que contém o analisador de espírito é excluído e não deixa pendurado ponteiros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top