[openrtm-users 00050] Re: RTシステムの終了について

Noriaki Ando n-ando @ aist.go.jp
2005年 12月 13日 (火) 21:53:42 JST


宇田様

安藤@産総研です

> いつも御世話になります。宇田@NECシステムテクノロジーです
> 
> RTシステムの終了方法についてご教授ください。
> 
> 1つのRTシステム全体を統括している(アプリケーションに相当する)
> コンポーネントがあり、そこからシステム全体に対して終了指示を出し
> たい場合、何か統一的な枠組みはありますでしょうか?

終了指示というのは、コンポーネントをExit状態にできればいいのでしょうか?
でしたら、各コンポーネントに対し、rtc_exit() を呼べば
(ACTIVE状態の場合は、rtc_stop(), rtc_exit()の順で呼ぶ)終了できるはずです。

ですので、統括コンポーネントは、サブコンポーネントのオブジェクト
リファレンスを何らかの方法で取得できていなければなりません。

マネージャには一応 findComponents というメソッドが用意されています。
これで、サブコンポーネントを探し出して、listか何かに入れて、
終了時に、list内のコンポーネントに対して一気にrtc_exit()を呼んでやれば
サブコンポーネントも止めることができます。

> 例えば以下の例で、統括コンポーネントからの終了指示をもとに、その
> コンポーネント自身とサブコンポーネント1〜4のスレッドだけでなく、
> それらを包含するプロセスA〜C(XXXComp の実装方式に準拠)も終了
> させたい場合、終了指示を適切に伝える方法はありますでしょうか。

プロセスを終了する公にされている方法はありません。
ただし、マネージャのメインループ (runManager()) が終了されれば、
プロセスも終了するので、これがご希望の方法だとおもいます。

本来なら、ユーザプログラムから、マネージャを終了させる
メソッドを提供すべきなのですが、今のところそういうものはありません。
#次バージョンでは提供いたします。

ただし、SIG_INIT(Ctrl+C)の割り込みハンドラhandler()という関数が
ありまして、こいつを呼ぶとマネージャが終了します。

ですので、この関数を呼びたい場所のファイルの中で、

extern "C" void handler (int);

と宣言しておいて、終了させたいタイミングで、

handler(0);

などと呼んでやると、もしかしたらプロセスを終了させられるかもしれません。

#こちらでもやってみましたが、一応runManager()は抜けるものの、
#CORBAの例外がでてアボートしました。


> 
> 
>                         プロセスA
> ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
> ┃      ┌─────────────────────┐  ┃
> ┃      │    ┌────┐                          │  ┃
> ┃   └→○┤  統括  ├○──┐                  │  ┃
> ┃            │コンポー│      │                  │  ┃
> ┃  ┌──→○┤ ネント ├○─┐│                  │  ┃
> ┃  │        └────┘    ││                  │  ┃
> ┃  │┌───────────┘│                  │  ┃
> ┗━││┌───────────┘━━━━━━━━━│━┛
>     │││                                          │    
>     │││              プロセスB                  │    
> ┏━│││━━━━━━━━━━━━━━━━━━━━━│━┓
> ┃  │││                                          │  ┃
> ┃  │││    ┌────┐          ┌────┐    │  ┃
> ┃ ││└→○┤  サブ  ├○──→○┤  サブ  ├○─┘  ┃
> ┃  ││      │コンポー│          │コンポー│        ┃
> ┃ ││    ○┤ネント1├○      ○┤ネント2├○      ┃
> ┃  ││      └────┘          └────┘        ┃
> ┃  ││                                                ┃
> ┗━││━━━━━━━━━━━━━━━━━━━━━━━━┛
>     ││                                                  
>     ││                プロセスC                        
> ┏━││━━━━━━━━━━━━━━━━━━━━━━━━┓
> ┃  ││                                                ┃
> ┃  ││      ┌────┐          ┌────┐        ┃
> ┃ │└─→○┤  サブ  ├○──→○┤  サブ  ├○─┐  ┃
> ┃  │        │コンポー│          │コンポー│    │  ┃
> ┃ │   ○┤ネント3├○      ○┤ネント4├○  │  ┃
> ┃  │        └────┘          └────┘    │  ┃
> ┃  └───────────────────────┘  ┃
> ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
> 
> 
> 


          安藤慶昭@独立行政法人産業技術総合研究所 研究員
                    知能システム研究部門 タスクインテリジェンス研究グループ
                    〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                    TEL: 029-861-5981 FAX: 029-861-5971
                    n-ando @ aist.go.jp, n-ando @ ieee.org



openrtm-users メーリングリストの案内