|
OpenRTM-aist 2.1.0
|
ExecutionContextWorker クラス [詳解]
#include <ExecutionContextWorker.h>

公開メンバ関数 | |
| ExecutionContextWorker () | |
| デフォルトコンストラクタ | |
| virtual | ~ExecutionContextWorker () |
| デストラクタ | |
| void | setECRef (RTC::ExecutionContextService_ptr ref) |
| RTC::ExecutionContextService_ptr | getECRef () |
| CORBA::Boolean | isRunning () |
| ExecutionContext 実行状態確認関数 | |
| RTC::ReturnCode_t | start () |
| ExecutionContext の実行を開始 | |
| RTC::ReturnCode_t | stop () |
| ExecutionContext の実行を停止 | |
| RTC::ReturnCode_t | startThread () |
| RTC::ReturnCode_t | stopThread () |
| RTC::ReturnCode_t | rateChanged () |
| ExecutionContext の実行周期が変更された | |
| RTC::ReturnCode_t | activateComponent (RTC::LightweightRTObject_ptr comp, RTObjectStateMachine *&rtobj) |
| RTコンポーネントをアクティブ化する | |
| RTC::ReturnCode_t | waitActivateComplete (RTObjectStateMachine *&rtobj, std::chrono::nanoseconds timeout=std::chrono::seconds(1), long int cycle=1000) |
| RTC::ReturnCode_t | deactivateComponent (RTC::LightweightRTObject_ptr comp, RTObjectStateMachine *&rtobj) |
| RTコンポーネントを非アクティブ化する | |
| RTC::ReturnCode_t | waitDeactivateComplete (RTObjectStateMachine *&rtobj, std::chrono::nanoseconds timeout=std::chrono::seconds(1), long int cycle=1000) |
| RTC::ReturnCode_t | resetComponent (RTC::LightweightRTObject_ptr comp, RTObjectStateMachine *&rtobj) |
| RTコンポーネントをリセットする | |
| RTC::ReturnCode_t | waitResetComplete (RTObjectStateMachine *&rtobj, std::chrono::nanoseconds timeout=std::chrono::seconds(1), long int cycle=1000) |
| RTC::LifeCycleState | getComponentState (RTC::LightweightRTObject_ptr comp) |
| RTコンポーネントの状態を取得する | |
| RTC::ReturnCode_t | addComponent (RTC::LightweightRTObject_ptr comp) |
| RTコンポーネントを追加する | |
| RTC::ReturnCode_t | bindComponent (RTC::RTObject_impl *rtc) |
| コンポーネントをバインドする。 | |
| RTC::ReturnCode_t | removeComponent (RTC::LightweightRTObject_ptr comp) |
| RTコンポーネントを参加者リストから削除する | |
| RTObjectStateMachine * | findComponent (RTC::LightweightRTObject_ptr comp) |
| bool | isAllCurrentState (RTC::LifeCycleState state) |
| bool | isAllNextState (RTC::LifeCycleState state) |
| bool | isOneOfCurrentState (RTC::LifeCycleState state) |
| bool | isOneOfNextState (RTC::LifeCycleState state) |
| void | invokeWorker () |
| void | invokeWorkerPreDo () |
| void | invokeWorkerDo () |
| void | invokeWorkerPostDo () |
| void | updateComponentList () |
| コンポーネントリストの更新 | |
静的公開メンバ関数 | |
| static const char * | getStateString (RTC::LifeCycleState state) |
限定公開型 | |
| using | CompItr = std::vector<RTC_impl::RTObjectStateMachine*>::iterator |
限定公開変数類 | |
| RTC::Logger | rtclog {"ec_worker"} |
| ロガーストリーム | |
| RTC::ExecutionContextService_var | m_ref |
| bool | m_running {false} |
| ExecutionContext の実行状態 true: running, false: stopped | |
| std::vector< RTC_impl::RTObjectStateMachine * > | m_comps |
| コンポーネントの参加者リスト | |
| std::mutex | m_mutex |
| std::vector< RTC_impl::RTObjectStateMachine * > | m_addedComps |
| std::mutex | m_addedMutex |
| std::vector< RTC_impl::RTObjectStateMachine * > | m_removedComps |
| std::mutex | m_removedMutex |
RTCの状態マシン・プロキシクラス RTObjectStateMachine を保持・管理 し、コールバックを実際にコールするためのワーカークラスインターフェー スクラス。ECの実装者は、ExecutionContextBase を継承し、メンバ変数 として保持されているこの ExecutionContextWorker クラスのインター フェース経由でRTObjectのコールバックをコールすることになる。
|
protected |
| RTC_impl::ExecutionContextWorker::ExecutionContextWorker | ( | ) |
デフォルトコンストラクタ
デフォルトコンストラクタ プロファイルに以下の項目を設定する。
|
virtual |
デストラクタ
デストラクタ
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::activateComponent | ( | RTC::LightweightRTObject_ptr | comp, |
| RTObjectStateMachine *& | rtobj ) |
RTコンポーネントをアクティブ化する
Inactive 状態にあるRTコンポーネントをActive に遷移させ、アクティ ブ化する。この操作が呼ばれた結果、on_activate が呼び出される。指 定したRTコンポーネントが参加者リストに含まれない場合は、 BAD_PARAMETER が返される。指定したRTコンポーネントの状態が Inactive 以外の場合は、PRECONDITION_NOT_MET が返される。
| comp | アクティブ化対象RTコンポーネント |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::addComponent | ( | RTC::LightweightRTObject_ptr | comp | ) |
RTコンポーネントを追加する
指定したRTコンポーネントを"参加者リスト"に追加する。追加された RTコンポーネントは attach_context が呼ばれ、Inactive 状態に遷移 する。指定されたRTコンポーネントが null の場合は、BAD_PARAMETER が 返される。指定されたRTコンポーネントが DataFlowComponent 以外の 場合は、BAD_PARAMETER が返される。
この関数が呼ばれた段階では、他の RTC は StateMachine 内のコール バック関数を呼び出し中の可能性があり、まずは "参加者リスト: m_addedComps" に RTC を追加しておく。コールバック呼び出しが一旦 終わった段階で同期的に updateComponentList() 関数が呼ばれ、この Worker に正式に RTC が参加した状態となる。
| comp | 追加対象RTコンポーネント |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::bindComponent | ( | RTC::RTObject_impl * | rtc | ) |
コンポーネントをバインドする。
コンポーネントに owned context をバインドする。引数に渡される RTObject_impl は、この EC の owner であり、内部的には RTObject の bindContext() をコール氏、ec_idを取得する。ec_id は ECOTHER_OFFSET よりも小さい。その後、RTObject のプロキシである RTObjectStateMachine を生成し、コンポーネントのリストに加える。
| rtc | RTコンポーネント |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::deactivateComponent | ( | RTC::LightweightRTObject_ptr | comp, |
| RTObjectStateMachine *& | rtobj ) |
RTコンポーネントを非アクティブ化する
Inactive 状態にあるRTコンポーネントを非アクティブ化し、Inactive に遷移させる。この操作が呼ばれた結果、on_deactivate が呼び出され る。指定したRTコンポーネントが参加者リストに含まれない場合は、 BAD_PARAMETER が返される。指定したRTコンポーネントの状態が Active 以外の場合は、PRECONDITION_NOT_MET が返される。 a
| comp | 非アクティブ化対象RTコンポーネント |
| RTObjectStateMachine * RTC_impl::ExecutionContextWorker::findComponent | ( | RTC::LightweightRTObject_ptr | comp | ) |
| RTC::LifeCycleState RTC_impl::ExecutionContextWorker::getComponentState | ( | RTC::LightweightRTObject_ptr | comp | ) |
RTコンポーネントの状態を取得する
指定したRTコンポーネントの状態(LifeCycleState)を取得する。指定し たRTコンポーネントが参加者リストに含まれない場合は、 UNKNOWN_STATE が返される。
| comp | 状態取得対象RTコンポーネント |
| RTC::ExecutionContextService_ptr RTC_impl::ExecutionContextWorker::getECRef | ( | ) |
|
inlinestatic |
| void RTC_impl::ExecutionContextWorker::invokeWorker | ( | ) |
| void RTC_impl::ExecutionContextWorker::invokeWorkerDo | ( | ) |
| void RTC_impl::ExecutionContextWorker::invokeWorkerPostDo | ( | ) |
| void RTC_impl::ExecutionContextWorker::invokeWorkerPreDo | ( | ) |
| bool RTC_impl::ExecutionContextWorker::isAllCurrentState | ( | RTC::LifeCycleState | state | ) |
| bool RTC_impl::ExecutionContextWorker::isAllNextState | ( | RTC::LifeCycleState | state | ) |
| bool RTC_impl::ExecutionContextWorker::isOneOfCurrentState | ( | RTC::LifeCycleState | state | ) |
| bool RTC_impl::ExecutionContextWorker::isOneOfNextState | ( | RTC::LifeCycleState | state | ) |
| CORBA::Boolean RTC_impl::ExecutionContextWorker::isRunning | ( | ) |
ExecutionContext 実行状態確認関数
この操作は ExecutionContext が Runnning 状態の場合に true を返す。 Executioncontext が Running の間、当該 Executioncontext に参加し ている全てのアクティブRTコンポーネントが、ExecutionContext の実 行種類に応じて実行される。
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::rateChanged | ( | ) |
ExecutionContext の実行周期が変更された
ExecutionContext の実行周期が変更された場合のコールバックを呼び 出す。ECの実装クラスの set_rate() オペレーションが呼び出された場 合、ExecutionContextProfile::setRate() が呼び出され、プロファイ ルの周期値が更新されるとともに、この関数が呼ばれ、 RTObjectStateMachine::onRateChagned() が呼び出される。
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::removeComponent | ( | RTC::LightweightRTObject_ptr | comp | ) |
RTコンポーネントを参加者リストから削除する
指定したRTコンポーネントを参加者リストから削除する。削除された RTコンポーネントは detach_context が呼ばれる。指定されたRTコンポー ネントが参加者リストに登録されていない場合は、BAD_PARAMETER が返 される。
| comp | 削除対象RTコンポーネント |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::resetComponent | ( | RTC::LightweightRTObject_ptr | comp, |
| RTObjectStateMachine *& | rtobj ) |
RTコンポーネントをリセットする
Error 状態のRTコンポーネントの復帰を試みる。この操作が呼ばれた結 果、on_reset が呼び出される。指定したRTコンポーネントが参加者リ ストに含まれない場合は、BAD_PARAMETER が返される。指定したRTコン ポーネントの状態が Error 以外の場合は、PRECONDITION_NOT_MET が返 される。
| comp | リセット対象RTコンポーネント |
| void RTC_impl::ExecutionContextWorker::setECRef | ( | RTC::ExecutionContextService_ptr | ref | ) |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::start | ( | ) |
ExecutionContext の実行を開始
ExecutionContext の実行状態を Runnning とするためのリクエストを 発行する。ExecutionContext の状態が遷移すると ComponentAction::on_startup が呼び出される。参加しているRTコンポー ネントが、初期化されるまで ExecutionContext を開始することはでき ない。ExecutionContext は複数回開始/停止を繰り返すことができる。
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::startThread | ( | ) |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::stop | ( | ) |
ExecutionContext の実行を停止
ExecutionContext の状態を Stopped とするためのリクエストを発行す る。遷移が発生した場合は、ComponentAction::on_shutdown が呼び出 される。参加しているRTコンポーネントが終了する前に ExecutionContext を停止する必要がある。ExecutionContext は複数回 開始/停止を繰り返すことができる。
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::stopThread | ( | ) |
| void RTC_impl::ExecutionContextWorker::updateComponentList | ( | ) |
コンポーネントリストの更新
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::waitActivateComplete | ( | RTObjectStateMachine *& | rtobj, |
| std::chrono::nanoseconds | timeout = std::chrono::seconds(1), | ||
| long int | cycle = 1000 ) |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::waitDeactivateComplete | ( | RTObjectStateMachine *& | rtobj, |
| std::chrono::nanoseconds | timeout = std::chrono::seconds(1), | ||
| long int | cycle = 1000 ) |
| RTC::ReturnCode_t RTC_impl::ExecutionContextWorker::waitResetComplete | ( | RTObjectStateMachine *& | rtobj, |
| std::chrono::nanoseconds | timeout = std::chrono::seconds(1), | ||
| long int | cycle = 1000 ) |
|
protected |
|
mutableprotected |
|
protected |
コンポーネントの参加者リスト
|
mutableprotected |
|
protected |
|
protected |
|
mutableprotected |
|
protected |
ExecutionContext の実行状態 true: running, false: stopped
|
protected |
ロガーストリーム