Aumenta l'arresto anomalo di Spirit quando utilizzato nelle DLL
-
08-07-2019 - |
Domanda
Riscontro un arresto anomalo durante l'utilizzo di Boost.Spirit e Boost.Thread librerie nella mia applicazione. Questo succede solo se ho usato lo Spirito parser durante la durata del processo dal thread principale.
L'incidente si verifica all'uscita e sembra essere correlato alla pulizia di memoria specifica del thread allocata dal parser Spirit. Probabilmente si sta bloccando a causa della sequenza di quali DLL sono scaricato, poiché la memoria specifica del thread viene allocata all'interno di una DLL che è già stato scaricato. La DLL Boost.Thread non viene comunque scaricata fino alla chiusura dell'applicazione stessa.
C'è un modo per costringere lo Spirito a ripulire il suo filo specifico stoccaggio, ad es. nel mio dll-main quando ricevo una notifica di distacco del processo?
Qualsiasi soluzione / suggerimento sarebbe apprezzata.
PS! La mia piattaforma e impostazioni:
- Visual Studio 2005
- BOOST_ALL_DYN_LINK
- BOOST_SPIRIT_THREADSAFE
Soluzione
Beh, ho trovato una soluzione alternativa.
Ogni posto in cui utilizzo la chiamata boost :: spirit :: parse, fondamentalmente ho generato un workerthread per eseguirlo, mentre il thread chiamante si blocca su una chiamata di join con workerthread. Non è l'ideale, ma sembra funzionare finora senza effetti collaterali.
Sono ancora interessato a qualsiasi alternativa, dato che la mia sensazione è che un filo separato non dovrebbe davvero essere necessario.
Altri suggerimenti
Boost.Spirit è solo intestazione, ovvero non risiede nella propria dll, quindi forse non è l'ordine di scaricamento delle dll ma piuttosto un problema diverso.
Assicurati che l'istanza contenente il tuo parser di spirito sia eliminata e non lasci puntatori penzolanti.