暂停执行指定的秒数。
HANG
与HALT
命令具有相同的最小缩写(H
)。挂起的区别在于它所需的挂起时间参数。$h
的差别HANG:pc hangarg
H:pc hangarg
其中 hangarg是
hangtime,...
HANG
将执行例程挂起指定的时间段。如果有多个参数,则Caché会按照显示的顺序在每个参数的持续时间内暂停执行。HANG
时间是使用系统时钟计算的,这决定了它的精度。
HANG
与HALT
命令具有相同的最小缩写(H)。挂起的区别在于它所需的挂起时间参数。
可选的后置条件表达式。如果后置条件表达式为TRUE(计算结果为非零数值),则Caché执行HANG
命令。如果后置条件表达式为假(计算结果为零),则Caché不执行该命令。
等待的时间量,以秒为单位。该时间可以表示为任何数字表达式。可以将挂起时间指定为整数以指定整数秒,或指定为小数以指定小数秒。可以使用幂(**)、算术表达式和其他数值运算符。
可以将挂起时间设置为0(零),在这种情况下不执行挂起。将挂起时间设置为负数或非数字值与将其设置为0相同。
可以将多个挂起时间参数指定为逗号分隔的列表,如下所述。
以下示例将进程暂停10秒:
/// d ##class(PHA.TEST.Command).TestHANG()
ClassMethod TestHANG()
{
WRITE !,$ZTIME($PIECE($HOROLOG,",",2))
HANG 10
WRITE !,$ZTIME($PIECE($HOROLOG,",",2))
}
DHC-APP>d ##class(PHA.TEST.Command).TestHANG()
21:01:21
21:01:31
DHC-APP>
下面的示例将进程挂起1/2秒。与$HOROLOG
不同,如果指定了$ztime
函数的精度参数,则$ZTIMESTAMP
可以返回小数秒。
/// d ##class(PHA.TEST.Command).TestHANG()
ClassMethod TestHANG()
{
WRITE !,$ZTIME($PIECE($HOROLOG,",",2))
HANG 1
WRITE !,$ZTIME($PIECE($HOROLOG,",",2))
WRITE !,$ZTIME($PIECE($ZTIMESTAMP,",",2),1,2)
HANG .5
WRITE !,$ZTIME($PIECE($ZTIMESTAMP,",",2),1,2)
}
DHC-APP>d ##class(PHA.TEST.Command).TestHANG()
21:02:39
21:02:40
13:02:40.42
13:02:40.92
HANG
参数可以将挂起时间指定为逗号分隔的数字表达式列表。Caché按照显示的顺序在每个参数的持续时间内暂停执行。负数被视为零。因此,挂起时间为16,-15将挂起16秒。
单独执行每个挂起时间参数可能会影响在挂起计算中使用当前时间的操作,如下例所示:
/// d ##class(PHA.TEST.Command).TestHANGMuti()
ClassMethod TestHANGMuti()
{
SET start = $ZHOROLOG
SET a = $ZHOROLOG + 5
w a - $ZHOROLOG,!
HANG 4, a - $ZHOROLOG
SET end = $ZHOROLOG
WRITE !,"elapsed hang = ",end - start
}
DHC-APP>d ##class(PHA.TEST.Command).TestHANGMuti()
4.999999
elapsed hang = 4.999958
在此示例中,挂起首先暂停执行4秒,然后在挂起前的当前时间加上5秒,减去解析第二个挂起参数的当前时间,暂停执行。因为挂起轮流执行每个参数,所以本例中的总挂起时间(大约)为5秒,而不是预期的(大约)9秒。
/// d ##class(PHA.TEST.Command).TestHANGMuti1()
ClassMethod TestHANGMuti1()
{
SET start = $ZHOROLOG
HANG 1,2,3,4
SET end = $ZHOROLOG
WRITE !,"elapsed hang = ",end - start
}
DHC-APP>d ##class(PHA.TEST.Command).TestHANGMuti1()
elapsed hang = 10.001667
HANG
与READ
时间比较可以在用户读取输出消息时使用HANG来暂停例程。但是,可以使用定时READ命令更有效地处理此类暂停。定时READ允许用户在准备就绪时继续,但HANG不允许,因为它设置为固定持续时间。