ふるお〜と!- FullAuto

AI・ロボットが普及しBI(ベーシックインカム)が早急に実現されることを願う元ニートのブログ

ふるお〜と!-FullAuto

イベントをキューにプッシュ ~EventQueue~

f:id:nullpo24:20210223120042p:plain:w300

一つのイベントに対してCPUが即時実行できればいいけどさ

f:id:nullpo24:20210223142836p:plain:w300

同時に複数のイベントが起こったらどうすんの?

そういう時はイベントをキューにプッシュするといいよ。

ふーん。具体的にどんなクラスを使えばいいの?

std::queueクラスを宣言して、std::condition_variableをPushすればいいわ。

f:id:nullpo24:20210223182937p:plain

ちなみにGazeboはstd::condition_variable、Webotはpthread_cond_tを使っているね

条件変数のOS間の違いをまとめてみたわ

condition_variableのメンバ関数[std] pthread_cond_tを引数に取る関数[Linux] Windows 説明
(constructor) pthread_cond_t
待機 wait pthread_cond_wait WaitForSingleObject 起床されるまで待機する
wait_for pthread_cond_timedwait 相対時間のタイムアウトを指定して、起床されるまで待機する
シグナル notify_one pthread_cond_signal 待機しているスレッドを一つ起床する
notify_all pthread_cond_broadcast 待機しているスレッドを全て起床する
SetEvent オブジェクトをシグナル状態にする
(destructor) pthread_cond_destroy