WAITCICS

同步事件。

WAITCICS

读取语法图跳过可视语法图WAITCICSECBLIST( ptr-值)NUMEVENTS( data-value)PURGEABLEPURGEABILITY( CVDA)NOTPURGEABLENAME( 名称)

条件: INVREQ

动态事务路由的注意事项: 使用此命令可能会创建对动态事务路由的使用产生负面影响的事务间亲缘关系。 有关事务亲缘关系的更多信息,请参阅 亲缘关系

描述

WAITCICS 等待发布 MVS 格式 ECB 的事件。 该命令将导致发出任务暂挂,直到发布其中一个 ECB ,即直到发生其中一个事件为止。 该任务可以在一个或多个 ECB 上等待。 如果它在多个 ECB 上等待,那么只要发布其中一个 ECB ,就可对其进行分派。 您必须确保清除每个 ECB ,并将其设置为二进制零,时间不得晚于可发布 ECB 的最早时间。 CICS® 无法为您执行此操作。 如果您等待先前发布且随后未清除的 ECB ,那么您的任务不会暂挂并继续运行,就像未发出 WAITCICS 一样。

CICS 包含由当前任务的 WAITCICS 命令传递的所有 ECB 的地址,在 CICS 传递给 MVS WAIT 设施的 ECBLIST 中,当其工作耗尽时,这些 ECB 将被传递给 MVS WAIT 设施。 可以使用 MVS POST 工具或通过手动发布来发布此类 ECB。 例如,可以通过将适当的值移入欧洲央行来完成手工发布。 如果手帖肯定是不会用的,最好用 WAIT EXTERNAL。

给定的欧洲央行可能不会同时等待多个任务。 如果未遵循此规则,并且 MVS WAIT 上的 CICS 传递的 ECBLIST 包含重复的 ECB 地址,那么 MVS 会异常终止 CICS。

选项

ECBLIST (ptr-value)
是一个指向表示事件的 MVS 格式的 ECB 地址列表的指针。 EBLIST 和 ECB 都可以在 16MB 行上方,即它们可以是 31 位地址。 每个 ECB 都必须是全字一致的。 将忽略空 (X'00000000 'X'FF000000') ECB 地址。
名称 (name)
指定符号名称 1-8 字母数字字符作为等待的原因。 您指定的值分别在 EXEC CICS INQ TASK 或 CEMT INQ TASK 命令的 SUSPENDVALUE 或 HVALUE 选项中返回。
NUMEVENTS (data-value)
是此类事件的数量,对应于 ECBLIST 中的地址数量。 字段为全字二进制。 当 NUMEVENTS 指定为 1 时, ECBLIST 仍必须是指向仅包含一个 ECB 地址的列表的地址。
PURGEABILITY (cvda)
导致发出任务暂挂,直到发布了其中一个 ECB; 即,直到发生其中一个事件为止。 传递到 CICS 的值为PUR可用 (缺省值) 或NOTPUR可用。 字段为全字二进制。 如果此任务正在等待另一个功能尝试将其清除,那么结果如下所示:
函数
PURGEABLE
NOTPURGEABLE
DTIMOUT 到期
异常终止 AEXY
无影响
CEMT SET TASK PURGE
EXEC CICS SET TASK
PURGE
异常终止 AEXY
无影响
CEMT SET TASK
FORCEPURGE

EXEC CICS SET TASK
FORCEPURGE
异常终止 AEXY
异常终止 AEXY

请参阅 事务恢复 ,以获取有关 DTIMOUT 和 SET TASK 的信息,以获取有关 SET TASK PURGE | FORCEPURGE 的信息。

条件

16 INVREQ
RESP2 值:
1
ECB 无效,例如 ECB 不是全字对齐的。
3
NUMEVENTS 不是正数。
4
指定了 PURGEABILITY ,但 CVDA 不正确。
5
在列表中找不到有效的 ECB ,因为 ECBLIST 地址无效,或者所有 ECB 地址都无效。

指定的 ECB 位于只读存储器中。

缺省操作: 异常终止任务。

示例

下图显示了如何使用 ECBLIST 参数指向欧洲央行地址列表,这些地址又指向各个 ECB。 请注意, ECBLIST 变量是指向列表的第一个地址的指针。
图 1。 ECBLIST 选项, EXEC CICS WAITCICS
此图显示 PTR_ECB_ADDR_LIST 中指向 ECB_ADDR_LIST 的 A (ECB_ADDR_LIST)。 此列表具有 A (ECB1) , A (ECB2) 和 A (ECB3) ,它们分别指向 ECB1, ECB2 和 ECB3。
DCL
   ECB1        FIXED BIN(31),      /* actual ecb */
   ECB2        FIXED BIN(31),      /* actual ecb */
   ECB3        FIXED BIN(31);      /* actual ecb */
DCL                 /* list of ecb addresses */
   1  ECB_ADDR_LIST,
      2  ECB_ADDR(3)  PTR;
DCL                 /* ptr to each addr list */
   PTR_ECB_ADDR_LIST  PTR;
ECB_ADDR(1) = ADDR(ECB1);
ECB_ADDR(2) = ADDR(ECB2);
ECB_ADDR(3) = ADDR(ECB3);
                           /* set up pointer */
PTR_ECB_ADDR_LIST = ADDR(ECB_ADDR_LIST);
/* PTR_ECB_ADDR_LIST = ADDR(ECB_ADDR(1));
                               (alternative) */
 EXEC CICS WAITCICS
           ECBLIST(PTR_ECB_ADDR_LIST)
           NUMEVENTS(3)
           PURGEABLE