POSIXのタイマースレッドを使いたい
realteckです.
仕事でPOSIX Thread,pthread
系の関数を使う機会があったので,忘れないうちにログをつけておきます.
そもそもPOSIXは,システムインタフェースの規格で,IEEEに策定されています.
このうち,POSIX 1003.1bに関しては,リアルタイムなオペレーション向けに拡張された,オプショナルな関数によって構成されます.
この1003.1b内のPOSIX Timerでは,周期的なタスク実行のため,timer_create()
を始めとした関数が用意されています.
timer_create()
は,timer_t
型の構造体に周期動作の設定を記述し,引数にすることで使用できますが,
その実,中身はというと,nanosleep
とスレッド実行する関数を切り替えているに過ぎません.
そもそも構造体に設定を記述して実行させるスタイルが,古いデザインなように思い,POSIX Timerのラッパーを探しました.
いくつかネット上にソースを上げている方がいますが,真に継承しているものは,boost::thread
になるでしょう.
しかし,多くがpthread
の拡張にとどまっており,timer_create
のラッパーらしいライブラリは存在しません.
(私のサーベイ力では見つけられなかったので,どなたか教えてください)
そこで,周期実行を主とするロボットやリアルタイムなサーバ処理を記述する場合,割とお手製のスケジューラを組む必要が出てきます. 特にC++なんかは多いのでしょうか,企業ではこの手のライブラリがある意味の資産として,引き継がれることも少なくありません.
ROS実行も結局はリアルタイムノードの構築が難しいことから,この手のミドルウェアは解決になっていません. とすると,汎用POSIXの上にラッパーを構築するのが手早い気がします. さて,問題は自分で作るべきか,すでにうまい具合に作られたシステムがあるか.
余談ですが,近年はマイコン環境にもPOSIXの使えるOSも増えているので,ラッパーを作ることに少なからず意味はあるでしょう. 仮にROS互換のインターフェースが実装できれば,リアルタイムタスクはこのラッパーに,そうでない重い処理やオフライン処理はROSに,といった作業の分担ができますね.
誰かやってくれないかなぁ〜...