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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top