メッセージキューがいっぱいになるのを避けようとしているので、いくつか質問があります
mq_attrを使用する場合
- mq_curmsgsがいっぱいになるのはいつですか? 0 または max_msgs の場合
- 満杯になったら洗い流す必要はありますか?
- select、poll、またはepollのいずれを使用することをお勧めしますか? もしそうなら、私はそれらをどのように使用しますか
メッセージキューがいっぱいになるのを避けようとしているので、いくつか質問があります
mq_attrを使用する場合
(1) mq_curmsgs == mq_maxmsg がいっぱいです
(2) 続けて書き込みたい場合のみ。読んだことのないものをキューに入れる意味は何ですか? キューを読み取るのではなく、その場でキューを拡張できるかどうかを尋ねている場合は、いいえ。キューの制限は、作成時に指定されます。
(3) 何をしているかによります。キューを読み取るための代替手段は、基本的に次のようになります。
mq_receive
デフォルトでブロックします。mq_open
か、 でノンブロッキングに変更できますmq_setattr
。は、現在読み取るものがあるかどうかを確認するための基本的なポーリング機能を提供します。mq_notify
。これにより、(a) シグナルまたは (b)空のキューが新しいメッセージを受け取るたびにスレッドを生成するように指定できます。mq_timedreceive
。これは、キューがブロッキング モードの場合、指定した時間だけブロックします。select
mqd_t 型はファイル記述子であるため、Linux では などを使用できます。これは、他の POSIX システムには当てはまらない場合があります。 select
および兄弟は、キューを他の I/O イベントと多重化する機能を提供し、キューに読み取るものがあるときに通知を受けます。