$ZMAXTPTIme

$ZMAXTPTI[ME] は、現在のトランザクションの最も外側のTSTART / TCOMMITペアによって囲われた完了されたすべての活動のために、GT.Mが待つべき期間を示された、整数値が入ります。

$ZMAXTPTIMEは、SETはできますが、NEWはできません。

$ZMAXTPTIME は、その値を環境変数 gtm_zmaxtptime からとります。gtm_zmaxtptime が定義されていない場合、$ZMAXTPTIMEの初期値はゼロ(0)秒であり、 "タイムアウトなし"(無制限の時間)を示します。トランザクションの一番外側のTSTARTの操作が実行する時に、$ZMAXTPTIMEの値は、そのトランザクションのタイムアウト設定を決定します。

$ZMAXTPTIMEの期限が切れると、GT.Mは、現在有効な$ETRAP/$ZTRAPの例外ハンドラを実行します。

[注意] 注意

$ZMAXTPTIMEの負の値も、"タイムアウトなし"として扱われます。タイムアウトは最も外側のトランザクションにのみ適用されます、すなわち、$ZMAXTPTIMEは、TSTARTが別のトランザクション内にネストされても効果はありません。

例:

Test;testing TP timeouts
  set $ZMAXTPTIME=6,^X=0,^Y=0,^Z=0
  write "Start with $ZMAXTPTIME=",$ZMAXTPTIME,":",!
  for sleep=3:2:9 do
  . set retlvl=$zlevel
  . do longtran;ztrap on longtran
  ;continues execution
  ;on next line
  . write "(^X,^Y)=(",^X,",",^Y,")",!
  write !,"Done TP Timeout test.",!
 quit
longtran ;I/O in TP doesn't get rolled back
  set $etrap=" goto err"
  tstart ():serial
  set ^X=1+^X
  write !,"^X=",^X,",will set ^Y to ",sleep
  write " in ",sleep," seconds..."
  hang sleep
  set ^Y=sleep
  write "^Y=",^Y
  tcommit
  write "...committed.",!
  quit
err;
  write !,"In $ETRAP handler. Error was: "
  write !," ",$zstatus
  if $TLEVEL do ;test allows handler use outside of TP
  . trollback
  . write "Rolled back transaction."
  write !
  set $ecode=""
  zgoto retlvl

結果:

Start with $ZMAXTPTIME=6:
^X=1,will set ^Y to 3 in 3 seconds...^Y=3...committed.
^X=2,will set ^Y to 5 in 5 seconds...^Y=5...committed.
^X=3,will set ^Y to 7 in 7 seconds...
In $ETRAP handler. Error was:
150377322,longtran+7^tptime,%GTM-E-TPTIMEOUT, Transaction timeoutRolled back transaction.
^X=3,will set ^Y to 9 in 9 seconds...
In $ETRAP handler. Error was:
150377322,longtran+7^tptime,%GTM-E-TPTIMEOUT, Transaction timeoutRolled back transaction.
Done TP Timeout test.
inserted by FC2 system