select()
は、Unix特有のOSコールであり、したがって、Adaの標準ライブラリの一部ではありません。
Unixシステムコールインターフェイスを提供する(標準ではない)パッケージを見つけるか、インターフェイスプラグマを使用して自分でラップするか、別の方法をとる必要があります。
私はUnixシステムを手に入れていないので、最初の選択肢として少しだけ助けることができます。 Posixのパッケージはになるはずです。私はあなたがそのようなpackage (Florist) for Gnat hereを見つけることができると信じています。私はその品質について話すことができません。
独自のバインディングを作成するには、これに付属の施設をAppendix B of the LRMでチェックしてください。これは高度なトピックですが、あなたのOSがサブルーチンリンケージをどのようにしているのか、あるいは学習する準備ができていないかを知っていない限り試行してはなりません。
「別のアプローチ」では、Adaのタスクや保護されたオブジェクト(C++のprotected
キーワードと混同しないでください)について使用しているリファレンスガイドを調べてください。たとえば、シリアルポートから受信データを読み取るタスクが1つのタスクを持つことができます。ランデブーを使用して読み取り間で同期をとることも、保護されたオブジェクトを介して実装されたキューを使って実際にセクシーにすることもできます。
答えは、あなたが話そうとしているシリアル通信インターフェイスの性質によって決まると思います。 TCP/IPソケットの場合、GNAT.Socketsは必要なものを提供します(コンパイラ固有のものですが)。私たちがシリアルポートの性質を知るまでは、シグナルが記録されたファイル記述子に何が必要かを言うのは難しいです。 –
私はちょうどモデムコマンドを送信して、そのファイル記述子での応答を待ちます。しかし、T.E.D.以下に言及してください。これをやめてタスキングを検討するほうが良いかもしれません。私はそれを "Ada"のやり方でしたいと思っていますが、どこを見なければならないのか分かりませんでした。 – zeroc8