Error message

  • Warning: file_put_contents(temporary://fileaB4Jis): failed to open stream: "DrupalTemporaryStreamWrapper::stream_open" call failed in file_unmanaged_save_data() (line 2024 of /var/www/html/openrtm/includes/file.inc).
  • The file could not be created.
  • Warning: file_put_contents(temporary://fileg9xyGr): failed to open stream: "DrupalTemporaryStreamWrapper::stream_open" call failed in file_unmanaged_save_data() (line 2024 of /var/www/html/openrtm/includes/file.inc).
  • The file could not be created.

[openrtm-users 00126] コンポーネント内での不定期イベント待ちの方法について

1 post / 0 new
root
Offline
Last seen: 6 days 11 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00126] コンポーネント内での不定期イベント待ちの方法について

こんにちは

産総研 清水です.

コンポーネントのonExecute()内で,
不定期に発生するイベントを待たなければいけないとき,
どのようにするのがよいのか,
どなたか良い方法をご存じないでしょうか?

onExecute()は,遅延なく周期的に実行されなければならないため,
その中では,sleepやwaitなどの処理をブロックするものは,
原則,許されません.しかしながら,SimpleIOのConsoleInのように,
キーボード等の外部デバイスを介してオペレータの指令を受け,
それを基に,何かの処理を開始するというようなことをしたい場合,
すなわち,イベントドリブン方式の処理をコンポーネントにさせたい場合,
不定期に起こるイベント(オペレータの指令)を
onExecute()内で待ち受ける必要があります.

しかしながら,当然のこと,そのイベントは起こらないこともあるので,
そのような時は無限に待ち状態になってしまい,
実行コンテキストの処理が永遠にブロックされてしまうので,
コンポーネントの操作すらできなくなってしまいます.

理想的には,実行コンテキストの周期を制限時間としてイベントを待ち,
制限時間内にイベントが起こらなかったら
ブロックを解除して次の周期に進むというのがよいのですが,
デバイスから通知されるイベントをユーザ空間のプログラムから
タイムアウト付きで待つ方法がわかりません.

とりあえずの無限待ちの回避法として,
周期的にデバイスをポーリングするという方法を,
SimpleIOのConsoleInに追加してみました.(添付ファイル参照)
これでも目的は達成されますが,ポーリングは効率が悪いため,
できればタイムアウト付きのイベント待ちを実装したいと思っています.

ユーザ空間でタイムアウト付きでイベントを待つ方法をご存じの方,
または,もっと効率の良い方法をご存じの方は
御教示頂けると助かります.

よろしくお願いします.

清水

Undefined

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK