[choreonoid-users-ja 00252] Re: ControllerItem内で一時停止/再開を認識するには

伊藤 宣博 norihiro-ito @ eac-inc.co.jp
2017年 8月 30日 (水) 18:06:36 JST


こんにちは、伊藤です。

この件は、安易な解決方法ですが、別スレッドを起こしてシミュレータの
状態を監視することで対応しました。

//別スレッド処理
void MyControllerItem::monitorSimulatorState()
{
	SimulatorItem* simlator = findOwnerItem<SimulatorItem>();

	while (monitoring) {
		simulatorIsPausing = simlator->isPausing();
	}
}

シミュレータ側にステート管理用の関数登録口があると良いかもと
思ったのですが、考えますとあまり需要はなさそうです、、。

以上、よろしくお願いいたします。

On 2017/08/25 18:03, 伊藤 宣博 wrote:
> はじめまして。伊藤と申します。
> 
> 1.6開発版を使用しています。
> 現在、ControllerItemを継承してコードを書いているのですが、
> 一時停止/再開のタイミングで行いたい処理があり、以下のように
> ControllerItemのcontrol()の中でSimulatorItemのAPIを使うことで
> 実現できないかと考えました。
> 
> bool MyControllerItem::control() {
>    cnoid::SimulatorItem* simulator = findOwnerItem<SimulatorItem>();
>    simulator->isRunning()
>    simulator->isPausing()等の利用
> }
> 
> しかし、一時停止してしまうと、control()の呼び出しも停止する
> ことがわかり、これでは制御できないことがわかりました。
> 一時停止/再開のトリガーで処理を実行する方法はありますでしょうか。
> 
> ご助言をいただけると幸いです。
> よろしくお願いいたします。


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