第十二章 Caché 命令大全 HANG 命令

文章目录

  • 第十二章 Caché 命令大全 HANG 命令
  • 重要
  • 大纲
    • 参数
  • 描述
  • 参数
    • pc
    • hangtime
  • 示例
  • 注意
    • 多个`HANG`参数
    • `HANG`与`READ`时间比较

第十二章 Caché 命令大全 HANG 命令

暂停执行指定的秒数。

重要

  1. HANGHALT命令具有相同的最小缩写(H)。挂起的区别在于它所需的挂起时间参数。
  2. 注意挂起时减去$h的差别

大纲

HANG:pc hangarg
H:pc hangarg

其中 hangarg是

hangtime,...

参数

  • pc 可选-后置条件表达式。
  • hangtime 等待的时间量,以秒为单位。 解析为正数字值的表达式,或逗号分隔的数字表达式列表。

描述

HANG将执行例程挂起指定的时间段。如果有多个参数,则Caché会按照显示的顺序在每个参数的持续时间内暂停执行。HANG时间是使用系统时钟计算的,这决定了它的精度。

HANGHALT命令具有相同的最小缩写(H)。挂起的区别在于它所需的挂起时间参数。

参数

pc

可选的后置条件表达式。如果后置条件表达式为TRUE(计算结果为非零数值),则Caché执行HANG命令。如果后置条件表达式为假(计算结果为零),则Caché不执行该命令。

hangtime

等待的时间量,以秒为单位。该时间可以表示为任何数字表达式。可以将挂起时间指定为整数以指定整数秒,或指定为小数以指定小数秒。可以使用幂(**)、算术表达式和其他数值运算符。

可以将挂起时间设置为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

HANGREAD时间比较

可以在用户读取输出消息时使用HANG来暂停例程。但是,可以使用定时READ命令更有效地处理此类暂停。定时READ允许用户在准备就绪时继续,但HANG不允许,因为它设置为固定持续时间。

你可能感兴趣的:(Caché,命令大全)