[openrtm-beginners:00482] Re: 終了処理について

Ando Noriaki n-ando @ aist.go.jp
2013年 8月 23日 (金) 19:29:56 JST


安藤です

manager->shutdown() 内ではCORBAやManagerのスレッド終了待ちを
している部分があります。そして、DLL_PROCESS_DETACH 時には
スレッド終了待ちをしてはいけないという掟があるようです。
(すると杉浦さんの例のようにデッドロックに陥るようです。)
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCsQFjAA&url=http%3A%2F%2Fmsdn.microsoft.com%2Fja-jp%2Flibrary%2Fcc429094.aspx&ei=RDgXUrFkh6OTBbrIgZAO&usg=AFQjCNHCn9fmSuN6fAxyKAR_79xq2dOyvg&sig2=3DWgEkjtPmD9W22V6F_htw&bvm=bv.51156542,d.dGI
http://d.hatena.ne.jp/heisseswasser/20120508/1336459226

もしかするとこれが原因かもしれません。

したがって、manager->shutdown() はDllMain内のDLL_PROCESS_DETACH時
ではなく、それ以前に呼んみてはいかがでしょうか?



2013年8月23日 19:03  <n.sugiura.tr @ gmail.com>:
> お世話になります。杉浦です。 何度もすいません。
> 色々教えて頂きありがとうございます。
> 色々と試してみましたが、どうしても終了処理がうまく行かず、
> 行き詰っております。
> こちらの前提としまして、以下のようにしています。
> ・Windows Form(C++/CLR) + DLL(win32) の構成
> ・RTM関連の処理は全てDLL内に書く必要がある。
> ・DLLは動的リンク。
> ・動的リンクされたとき(DLL_PROCESS_ATTACH)にRTM初期化を行う
> ・動的リンク解除されたとき(DLL_PROCESS_DETACH)にRTM終了を行う
> 現在の問題点は、DLL_PROCESS_DETACHのときに、DLLが落ち、
> 結果的にアプリ全体が落ちてしまう点です。
> いくつか試してみたところ、
> DLL_PROCESS_DETACHのときに、manager->shutdown()が無いと
> すぐに落ちます。
> DLL_PROCESS_DETACHのときに、manager->shutdown()があると、
> ここでブロッキングされて待ち続けてしまいます。
> どうしたら正常に終了させることが出来るでしょうか?
> 終了処理以外は正常に動作できています。
> よろしくお願い致します。
>
>


More information about the openrtm-beginners mailing list