6.4.1 メッセージの優先度の設定

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

tpsprio()関数で優先度を設定できるのは、1つのリクエストだけです。つまり、tpcall()またはtpacall()によって次に送信されるリクエスト、またはサービス・サブルーチンによって次に転送されるリクエストだけです。

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

int
tpsprio(int prio, long flags);

次の表は、tpsprio()関数の引数を示しています。

表6-3 tpsprio()関数の引数

引数 説明
prio 新しい優先度を示す整数値。この引数の持つ意味は、flagsパラメータによって異なります。flagsにゼロが設定されている場合、prioは相対値を示し、値の符号は現在の優先度を上げることまたは下げることを示します。他の値が設定されている場合、指定された値は絶対値を示し、prioには0 - 100の範囲の値を設定する必要があります。この範囲外の値を設定すると、値は50に設定されます。
flags prioの値を相対値(0)または絶対値(TPABSOLUTE)のどちらの値として処理するのかを示すフラグ。デフォルトは相対値です。

以下のサンプル・コードは、TRANSFERサービスから引用したものです。このコードでは、TRANSFERサービスはクライアントとして動作し、tpcall()を使用してWITHDRAWALサービスに同期要求を送信しています。TRANSFERtpsprio()を呼び出してWITHDRAWALに対するリクエスト・メッセージの優先度を上げます。また、TRANSFERのキューを待機した後で、WITHDRAWALサービス(その後DEPOSITサービス)に対するリクエストがキューに格納されないようにします。

リクエスト・メッセージの優先度の設定のリスト

/* increase the priority of withdraw call */
if (tpsprio(PRIORITY, 0L) == -1)
   (void)userlog("Unable to increase priority of withdraw\n");

if (tpcall("WITHDRAWAL", (char *)reqfb,0, (char **)&reqfb, (long *)
\
         &reqlen,TPSIGRSTRT) == -1) {
      (void)Fchg(transf, STATLIN, 0, "Cannot withdraw from debit account", \
          (FLDLEN)0);
      tpfree((char *)reqfb);
      tpreturn(TPFAIL, 0,transb->data, 0L, 0);
}