0

システム V メッセージ キューを使用しています。私のプログラムでは、1 つのスレッドが継続的にメッセージ キューにデータを追加し、別のスレッドがメッセージ キューからデータを取り出します。

私のメッセージキュー構造のフォーマットは

struct mymsgbuf {
    long mtype;
    char mtext[MAX_SEND_SIZE];
};

メッセージから取得するときmtext、に依存する昇順でデータを取得する必要がありますtag

メッセージ キューの受信

q_ret = msgrcv(msgqueue_id, (struct mymsgbuf *)&recvbuf, MAX_SEND_SIZE, 0, 0)

上記の形式は、メッセージ キューに送信された最初のデータから返されます。

メッセージキューを昇順で受信するテクニックはありますか?

4

1 に答える 1

0

が整数の場合tag(または整数に変換できる場合)、それが mtype フィールドの目的です。tagとして使用するだけtypeです。

4msgrcv番目のパラメーターで読み取りたい型を指定します。原則として、読むべきそのタイプのメッセージがない場合はブロックしたくないので、IPC_NOWAITフラグも使用する必要があります。したがって、タイプ/タグ 2 を読み取るには、次のようになります。

q_ret = msgrcv(msgqueue_id, (struct mymsgbuf *)&recvbuf, MAX_SEND_SIZE, 2, IPC_NOWAIT);

mtypes を読み取ってプレイできる他のゲームがいくつかあります。たとえば、タイプ 2ではないキュー内の最初のメッセージを読み取ります。

q_ret = msgrcv(msgqueue_id, (struct mymsgbuf *)&recMSG_EXCEPTvbuf, MAX_SEND_SIZE, 2, IPC_NOWAIT | MSG_EXCEPT);

これらについては、msgrcv の man ページで説明されています。型スキームが複雑になりすぎていることに気付いた場合、それは、弾丸をかじって、他の種類の IPC またはデータ構造を使用したいというサインです。

于 2013-08-06T00:40:23.850 に答える