Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


dc_rpc_set_service_prio

〈このページの構成〉

名称

サービス要求のスケジュールプライオリティの設定

形式

ANSI C ,C++の形式

#include <dcrpc.h>
void  dc_rpc_set_service_prio(DCLONG prio)

K&R版 C の形式

#include <dcrpc.h>
void  dc_rpc_set_service_prio(prio)
DCLONG      prio;

機能

サービス要求のプライオリティを設定します。サービス要求単位でスケジュールプライオリティを制御する場合に呼び出します。この関数で設定したプライオリティは,この関数を再び呼び出すまで更新されません。したがって,同じプライオリティでまとめてサービス要求する場合は,この関数を1回だけ呼び出します。

この関数で指定したプライオリティは,直後に呼び出すdc_rpc_call関数,およびdc_rpc_call_to関数で,スケジュールキューを経由してサーバに通知されます。

この関数を一度も呼び出さない場合の処理は,スケジュールサービスの省略時解釈値である4が,サービス要求のプライオリティとして指定されます。

UAPで値を設定する引数

●prio

サービス要求のスケジュールプライオリティを,0または1から8の範囲で設定します。prioの設定は省略できません。

最も高いプライオリティの値は1で,最も低いプライオリティの値は8です。

0を設定した場合は,スケジュールサービスの省略時解釈となります。

上記以外の値を設定した場合は,dc_rpc_set_service_prio関数は無視されます。

リターン値

dc_rpc_set_service_prio関数のリターン値はありません。

注意事項

  1. キュー受信型サーバでは,設定したサービス要求のプライオリティは,サーバUAPのユーザサービス定義に,service_priority_control=Y(プライオリティを制御する)を指定している場合だけ有効です。サービス要求する相手のサーバUAPでプライオリティを制御していない場合は,この関数を呼び出しても無効になります。

  2. 2回目以降の連鎖RPCでのdc_rpc_call関数,およびdc_rpc_call_to関数と,連鎖RPCを終了させるために呼び出す同期応答型RPCのdc_rpc_call関数(flagsにDCNOFLAGSを設定),およびdc_rpc_call_to関数(flagsにDCNOFLAGSを設定)のサービス要求に対してdc_rpc_set_service_prio関数を呼び出しても無効となります。

  3. dc_rpc_call関数,およびdc_rpc_call_to関数は,サービス要求のプライオリティを省略値にリセットしません。サービス要求のプライオリティをリセットする場合は,引数prioに0を設定したdc_rpc_set_service_prio関数を呼び出し直してください。

  4. この関数は,リモートAPI機能では使用できません。rapクライアントで発行するdc_rpc_call関数,およびdc_rpc_call_to関数のサービス要求に対して,dc_rpc_set_service_prio関数を呼び出しても無効になります。

使用例

int     rc;
DCULONG in_len,len;
char    *buf;
 
/* サービス要求1回目:
 * プライオリティの指定はなし(スケジュールサービスの省略時解釈)
 */
rc = dc_rpc_call("SPPG","ECHO","ex1",&in_len,buf,&len,DCNOFLAGS);
 
/* サービス要求2回目:プライオリティ = 8
 */
dc_rpc_set_service_prio(8);
rc = dc_rpc_call("SPPG","ECHO","ex2",&in_len,buf,&len,DCNOFLAGS);
 
/* サービス要求3回目(連鎖RPC):プライオリティ = 1
 */
dc_rpc_set_service_prio(1);
rc = dc_rpc_call("SPPG","ECHO","ex3",&in_len,buf,&len,DCRPC_CHAINED);
   :
(連鎖RPC dc_rpc_call(DCRPC_CHAINED) n回繰り返し)
   :
rc = dc_rpc_call("SPPG","ECHO","ex3",&in_len,buf,&len,DCNOFLAGS);
 
/* サービス要求(4+n+1)回目(以降):
 * プライオリティをリセット(スケジュールサービスの省略時解釈)
 */
dc_rpc_set_service_prio(0);
rc = dc_rpc_call("SPPG","ECHO","ex4",&in_len,buf,&len,DCRPC_NOREPLY);