6.4.2 メッセージの優先度の取得

tpsprio(3c)関数を使用すると、メッセージ・リクエストの優先度を取得できます。

tpgprio()関数の呼出しには、次のシグネチャを使用します。

int
tpgprio();

リクエスタは、tpcall()またはtpacall()関数を呼び出した後にtpgprio()関数を呼び出して、リクエスト・メッセージの優先度を取得できます。リクエスタが関数を呼び出したがリクエストが送信されていない場合、関数は失敗して-1が返され、tperrno(5)TPENOENTが設定されます。tpgprio()の処理が成功すると、1 - 100の範囲内の整数値が返されます。100が最も高い優先度です。

tpsprio()関数を使用して優先度が明示的に設定されていない場合、メッセージの優先順として、要求を処理するサービス・ルーチンの優先度が設定されます。アプリケーション内では、リクエストを処理するサービスの優先度にデフォルト値の50が設定されます。ただし、システム管理者が別の値を指定している場合は除きます。

次のサンプル・コードは、非同期呼出しによって送信されたメッセージの優先度を確認する方法を示しています。

送信後のリクエストの優先度の確認のリスト

#include <stdio.h>
#include "atmi.h"

main ()

{
int cd1, cd2;                /* call descriptors */
int pr1, pr2;               /* priorities to two calls */
char *buf1, *buf2;         /* buffers */
long buf1len, buf2len;    /* buffer lengths */

join application

if (buf1=tpalloc("FML", NULL, 0) == NULL) 
    error
if (buf2=tpalloc("FML", NULL, 0) == NULL)
   error

populate FML buffers with send request

if ((cd1 = tpacall("service1", buf1, 0, 0)) == -1)
   error
if ((pr1 = tpgprio()) == -1)
   error
if ((cd2 = tpacall("service2", buf2, 0, 0)) == -1)
   error
if ((pr2 = tpgprio()) == -1)\
   error

if (pr1 >= pr2) {   /* base the order of tpgetrplys on priority of calls */
        if (tpgetrply(&cd1, &buf1, &buf1len, 0) == -1)
           error
        if (tpgetrply(&cd2, &buf2, &buf2len, 0) == -1)
           error
}
else {
        if (tpgetrply(&cd2, &buf2, &buf2len, 0) == -1)
            error
        if (tpgetrply(&cd1, &buf1, &buf1len, 0) == -1)
           error
}
. . .
}