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

1 つの投稿 / 0 new
root
オフライン
Last seen: 12時間 3分 前
登録日: 2009-06-23 14:31
[openrtm-users 00126] コンポーネント内での不定期イベント待ちの方法について

こんにちは

産総研 清水です.

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

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

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

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

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

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

よろしくお願いします.

清水

未定義

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2209
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク