産総研 安藤です
先ほどのメールの回答です。
添付のサンプルをご覧ください。
添付ファイル Pipe.tar.g_ は Pipe.tar.gz にリネームして解凍してください。
このコンポーネントはTimedLong型のInPort/OutPortをひとつづつもち、
InPortに入ってきたデータをOutPortへコールバックを使って即座に
伝送するものです。
コンパイル後、ConsoleInとConsoleOutの間にはさんで接続してください。
Pipeコンポーネントはコールバックを使用しているので、
onExecuteでデータの読み込み+書き出しをしなくても、
InPortから入ったデータが即座にOutPortから出て行きます。
したがって、Active化しなくても動作します。
2008/07/08 19:48 Ando Noriaki :
> 産総研 安藤です
>
> 高エネ研の安様より以下のようなメールをいただきましたので、
> 参考までにOpenRTM MLに転送させていただきます。
>
>
> ---------- 転送されたメッセージ ----------
> 差出人: Yoshiji Yasu
> 日付: 2008/07/08 10:02
> 件名: [rtm-kek 00535] onWriteConvert
> 宛先:
>
>
> 安です。onWriteConvertについて質問です。
>
> proc1, proc2, proc3という3つのコンポーネントの中のproc2にコールバックを
> 入れようとしています。やりたいことは、proc2のInPortの RingBufferのwrite
> のタイミングで、proc2のメインメソッドをすっ飛ばして、write時のコールバッ
> クでOutPortのwrite を実行してしまうということです。
>
> InPortCorbaConsumer.hで
> status = _ptr()->put(tmp);
> でCORBAのデータ転送とRingBufferのputメソッドを行います。
> OutPort.h, InPort.hのwriteメソッドの中で、
> status = this->put((*m_OnWriteConvert)(value));
> という形でコールバックが呼ばれます。
>
> proc1はOutPortのwriteをすると、RingBufferにput/getしてから _ptr()->putで
> CORBA転送しproc2のRingBufferにデータが書き込まれます。書き込まれた
> タイミングでコールバックするには、InPortCorbaConsumer.hにコールバックす
> るような仕掛けがないといけないのではないでしょうか?
>
> コールバックの例題をみると、
> OnWriteConvertの場合は、proc1ないしはproc2がOutPortのwriteを行うときに
> フィルタープログラムをコールバックに入れて転送するという使い方が自然のよ
> うですし、
> onReadConvertの場合は、proc2ないしはproc3がInPortのreadを行うときにやは
> りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
> ようです。
>
> 私の理解が間違っているかもしれません。
>
産総研 安藤です
高エネ研の安様より以下のようなメールをいただきましたので、
参考までにOpenRTM MLに転送させていただきます。
---------- 転送されたメッセージ ----------
差出人: Yoshiji Yasu
日付: 2008/07/08 10:02
件名: [rtm-kek 00535] onWriteConvert
宛先:
安です。onWriteConvertについて質問です。
proc1, proc2, proc3という3つのコンポーネントの中のproc2にコールバックを
入れようとしています。やりたいことは、proc2のInPortの RingBufferのwrite
のタイミングで、proc2のメインメソッドをすっ飛ばして、write時のコールバッ
クでOutPortのwrite を実行してしまうということです。
InPortCorbaConsumer.hで
status = _ptr()->put(tmp);
でCORBAのデータ転送とRingBufferのputメソッドを行います。
OutPort.h, InPort.hのwriteメソッドの中で、
status = this->put((*m_OnWriteConvert)(value));
という形でコールバックが呼ばれます。
proc1はOutPortのwriteをすると、RingBufferにput/getしてから _ptr()->putで
CORBA転送しproc2のRingBufferにデータが書き込まれます。書き込まれた
タイミングでコールバックするには、InPortCorbaConsumer.hにコールバックす
るような仕掛けがないといけないのではないでしょうか?
コールバックの例題をみると、
OnWriteConvertの場合は、proc1ないしはproc2がOutPortのwriteを行うときに
フィルタープログラムをコールバックに入れて転送するという使い方が自然のよ
うですし、
onReadConvertの場合は、proc2ないしはproc3がInPortのreadを行うときにやは
りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
ようです。
私の理解が間違っているかもしれません。