Skip to main content

HANG (ObjectScript)

指定された秒数だけ実行を中断します。

構文

HANG:pc hangtime,...
H:pc hangtime,...

引数

引数 説明
pc オプション — 後置条件式
hangtime 待機時間 (秒)正の数値に解決される式、または正の数値に解決されるコンマで区切られた数式のリスト。

説明

HANG は、ルーチンの実行を指定した時間 (秒数) だけ中断します。複数の引数がある場合、InterSystems IRIS は提示される順序で各引数の継続時間にわたって実行を中断します。HANG の時間はシステム時計を使用して計算されます。これにより、その精度が決定されます。

HANG の最小省略形 (H) は HALT コマンドと同じです。HANG は、必須の引数 hangtime を取るため区別できます。

引数

pc

オプションの後置条件式です。InterSystems IRIS は、後置条件式が True (0 以外の数値に評価される) の場合に HANG コマンドを実行します。InterSystems IRIS は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。 For further details, refer to Command Postconditional Expressions.

hangtime

待機時間 (秒)この時間は、数値式で表されます。hangtime は、整数秒を指定するために整数として指定したり、小数秒を指定するために小数として指定したりできます。指数 (**)、数値式、または他の数値演算子を使用することもできます。

hangtime を 0 (ゼロ) に設定すると、待機時間はありません。hangtime に負の数または非数値を指定した場合、0 に設定する場合と同じ結果となります。

複数の hangtime 引数を、数値式のコンマ区切りのリストとして指定することもできます。InterSystems IRIS は、提示される順序で各引数の継続時間にわたって実行を中断します。ここでも負の数は 0 と同様に処理されます。したがって、hangtime に 16,-15 を指定すると、待機時間は 16 秒となります。

以下の例で示すように、各 hangtime 引数が別々に実行される場合、hang 計算で現在の時刻を使用する処理に影響が及ぶ可能性があります。

  SET start=$ZHOROLOG
  SET a=$ZHOROLOG+5
  HANG 4,a-$ZHOROLOG
  SET end=$ZHOROLOG
  WRITE !,"elapsed hang=",end-start

この例では、HANG が最初に実行を 4 秒間一時停止します。次の引数が解析されると、時間は変数が設定されてから 4 秒が経過した時点になっています。したがって、2 回目の一時停止期間はわずか1 秒になります。HANG は各引数を順番に実行するため、この例では合計待機時間は (約) 5 秒となります。その他の場合に予期される (約) 9 秒ではありません。

以下の例では、処理が 10 秒間中断されます。

   WRITE !,$ZTIME($PIECE($HOROLOG,",",2))
   HANG 10
   WRITE !,$ZTIME($PIECE($HOROLOG,",",2))

以下の例では、処理が 1/2 秒間中断されます。$ZTIMESTAMP$HOROLOG とは異なり、$ZTIME 関数の precision パラメータが指定されている場合は秒の小数部を返すことができます。

   WRITE !,$ZTIME($PIECE($ZTIMESTAMP,",",2),1,2)
   HANG .5
   WRITE !,$ZTIME($PIECE($ZTIMESTAMP,",",2),1,2)

以下のような値を返します。

14:34:19.75
14:34:20.25

HANG と時間指定された READ との比較

HANG を使用して、ユーザが出力メッセージを読む間、ルーチンを停止させることができます。しかし、時間指定された READ コマンドを使用すると、このタイプの一時停止をより効果的に扱うことができます。時間指定された READ を使用すると、ユーザは準備ができた時点ですぐに処理を続行できます。しかし、HANG はあらかじめ待機時間が設定されているため、これは不可能です。

HANG および ^JOBEXAM

HANG コマンドは、現在のプロセスの実行を一時停止するのに使用します。

^JOBEXAM ユーティリティは、その他の実行中のプロセスの実行を中断したり、再開したりするのに使用できます。現在のプロセスの実行を中断するのには使用できません。^JOBEXAM を使用して、HANG コマンドによって一時停止されたプロセスの実行を再開することはできません。^JOBEXAM を使用して、HANG コマンドによって一時停止されたプロセスを中断した場合、^JOBEXAM の再開により、中断時に残っていた HANG 時間の部分を完了する必要があるプロセスがアクティブになります。

^JOBEXAM は、すべての実行中のプロセスに関する状態情報を表示します。HANG コマンドによって一時停止されているプロセスは、HANGW 状態として表示されます。^JOBEXAM によって中断されているプロセスは、SUSPW 状態として表示されます。

^JOBEXAM ユーティリティは、%SYS ネームスペースからターミナルで呼び出す必要があります。このユーティリティを呼び出すには、適切な特権を持っている必要があります。ユーティリティ名では、大文字と小文字が区別されます。以下のようにして ^JOBEXAM を実行できます。

  • DO ^JOBEXAM : すべての実行中のプロセスのリストを表示します。実行中のプロセスを終了、中断、または再開する文字コード・オプションが用意されています。

  • DO View^JOBEXAM : すべての実行中のプロセスのリストを表示します。プロセスを終了、中断、および再開するオプションはありません。

^JOBEXAM をプロセスに使用する場合は、^JOBEXAM を使用する時間を確保するために、HANG コマンドを使用してプロセスを一時停止することが効果的な場合があります。例えば、プロセスを一時停止する箇所でコードに以下を追加します。

set ^zMyProcessID = $JOB
while ( $DATA(^zMyDebugGlobal) = 1 ) 
{
    hang 1
} 

この方法を使用するには、プロセスを実行する前に ^zMyDebugGlobal グローバルを 1 に設定します。続いて ^JOBEXAM を実行します。^zMyProcessID グローバルがプロセス ID (PID) に設定されることで、^JOBEXAM を実行するときに目的のプロセスを見つけやすくなります。検査したプロセスを再開するには、^zMyDebugGlobal グローバルを強制終了します。

関連項目

FeedbackOpens in a new tab