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