Impulsionar Espírito acidente quando usado em DLLs
-
08-07-2019 - |
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
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.