[openrtm-users 00051] Re: RTシステムの終了について
Akio Uda
uda-axa @ necst.nec.co.jp
2005年 12月 14日 (水) 10:39:32 JST
To: 産総研 安藤様
いつも御世話になります。宇田@NECシステムテクノロジーです
ご回答ありがとうございます。
> 宇田様
>
> 安藤@産総研です
>
> > いつも御世話になります。宇田@NECシステムテクノロジーです
> >
> > RTシステムの終了方法についてご教授ください。
> >
> > 1つのRTシステム全体を統括している(アプリケーションに相当する)
> > コンポーネントがあり、そこからシステム全体に対して終了指示を出し
> > たい場合、何か統一的な枠組みはありますでしょうか?
>
> 終了指示というのは、コンポーネントをExit状態にできればいいのでしょうか?
> でしたら、各コンポーネントに対し、rtc_exit() を呼べば
> (ACTIVE状態の場合は、rtc_stop(), rtc_exit()の順で呼ぶ)終了できるはずです。
>
> ですので、統括コンポーネントは、サブコンポーネントのオブジェクト
> リファレンスを何らかの方法で取得できていなければなりません。
>
> マネージャには一応 findComponents というメソッドが用意されています。
> これで、サブコンポーネントを探し出して、listか何かに入れて、
> 終了時に、list内のコンポーネントに対して一気にrtc_exit()を呼んでやれば
> サブコンポーネントも止めることができます。
こちらの findComponents は、同じネーミングサービスに登録されている
コンポーネントであれば(ホストやプロセスが異なっていても)全て検索
できるのでしょうか?
また、引数にコンポーネント名を取るようですが、ワイルドカード指定の
ようなものは可能でしょうか、それとも探すべきコンポーネント名は要求
元で全て把握している必要がありますでしょうか?
> > 例えば以下の例で、統括コンポーネントからの終了指示をもとに、その
> > コンポーネント自身とサブコンポーネント1〜4のスレッドだけでなく、
> > それらを包含するプロセスA〜C(XXXComp の実装方式に準拠)も終了
> > させたい場合、終了指示を適切に伝える方法はありますでしょうか。
>
> プロセスを終了する公にされている方法はありません。
> ただし、マネージャのメインループ (runManager()) が終了されれば、
> プロセスも終了するので、これがご希望の方法だとおもいます。
はい、この方法を教えて頂きたいと思っていました。
> 本来なら、ユーザプログラムから、マネージャを終了させる
> メソッドを提供すべきなのですが、今のところそういうものはありません。
> #次バージョンでは提供いたします。
>
> ただし、SIG_INIT(Ctrl+C)の割り込みハンドラhandler()という関数が
> ありまして、こいつを呼ぶとマネージャが終了します。
>
> ですので、この関数を呼びたい場所のファイルの中で、
>
> extern "C" void handler (int);
>
> と宣言しておいて、終了させたいタイミングで、
>
> handler(0);
>
> などと呼んでやると、もしかしたらプロセスを終了させられるかもしれません。
>
> #こちらでもやってみましたが、一応runManager()は抜けるものの、
> #CORBAの例外がでてアボートしました。
通常の場合は、runManager()を含むプロセスは(コンソールウィンドウを
閉じるなどの操作で)強制終了させることになるのでしょうか?
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
z 宇田 安規男 z
z NECシステムテクノロジー株式会社 システムテクノロジーラボラトリ z
z 神奈川県川崎市中原区下沼部 1753 NEC 玉川事業場 9号館 z
z 〒 211-8666 Tel: 044-431-7574 Fax: 044-431-7588 z
z E-mail: uda-axa @ necst.nec.co.jp z
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
openrtm-users メーリングリストの案内