/ / Boost Spirit havárie pri použití v knižniciach DLL - c ++, boost, boost-thread, boost-spirit

Boost Spirit crash pri použití v DLL - c ++, boost, boost-thread, boost-spirit

Pri používaní funkcie Boost dochádza k havárii.Spirit a Boost.Thread knižnice v mojej aplikácii. Toto sa deje len vtedy, ak som použil Ducha analyzátora počas životnosti procesu z hlavného vlákna.

K havárii dôjde pri výstupe a zdá sa, že jetýkajúce sa vyčistenia vlákno špecifické úložisko pridelené analyzátorom Spirit. Je to pravdepodobne zrútenie kvôli sekvencii, ktoré sú DLL unloaded, pretože vlákno špecifická pamäť je pridelená vnútri DLL ktoré už bolo vyložené. Boost.Thread DLL však nie je vyložený, kým samotná aplikácia neukončí.

Existuje spôsob, ako prinútiť Ducha, aby očistil jeho vlákno špecifické skladovanie, napr. v mojom dll-main, keď dostanem oznámenie o odpojení?

Akékoľvek riešenia / rady by ocenili.

PS! Moja platforma a nastavenia:

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE

odpovede:

3 pre odpoveď č. 1

No našiel som riešenie.

Každé miesto, ktoré používam, :: duch ::analyzovať volanie, som v podstate plodiť workerthread na spustenie, zatiaľ čo volania vlákno blokuje na spojenie s pracovníkom. Nie je to ideálne, ale zdá sa, že funguje bez akýchkoľvek vedľajších účinkov.

Stále záujem o akékoľvek alternatívy, ako môj črevný pocit je, že samostatné vlákno by nemalo byť naozaj potrebné.


1 pre odpoveď č. 2

Boost.Spirit je len záhlavie, tzn. Že sa nenachádza vo svojej vlastnej dll, takže možno nie je to poradie vykladania dll, ale skôr iný problém.

Uistite sa, že inštancia obsahujúca váš syntaktický analyzátor je vymazaná a neponecháva "visiace ukazovatele".