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
サービスに同期要求を送信しています。TRANSFER
はtpsprio()
を呼び出して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);
}
親トピック: メッセージの優先度の設定および取得