[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 メーリングリストの案内