【发布时间】:2012-04-28 18:34:16
【问题描述】:
我有两个问题,第一个是主要问题。 1. 我能够在 cics 地图中显示日期,但我需要的是,我希望它在滴答作响,即它应该每秒显示一次更新。 2. 我有一个 COBOL-DB2 程序,它自动将数据库(DB2)中的数据插入到文件中。我希望基于时间戳调用该程序,即每 1 小时、2 小时或每天。
谢谢
【问题讨论】:
-
请将您的 DB2 问题拆分为单独的主题。它与您的主题行无关。
我有两个问题,第一个是主要问题。 1. 我能够在 cics 地图中显示日期,但我需要的是,我希望它在滴答作响,即它应该每秒显示一次更新。 2. 我有一个 COBOL-DB2 程序,它自动将数据库(DB2)中的数据插入到文件中。我希望基于时间戳调用该程序,即每 1 小时、2 小时或每天。
谢谢
【问题讨论】:
您可以这样做,但您需要更改修改传统的伪对话方法。无需返回并等待用户事件,您可以在几秒钟后使用当前的 commarea 启动您的 tran 并退出。如果在那段时间发生了用户事件,您可以取消您的启动请求,如果没有,您可以刷新屏幕时间戳并重复。
只是刷新时间戳有点痛苦。除非您有充分的理由,否则打扰没有多大意义。
DB2 的东西很简单。使用间隔控制启动您的 tran,与上述相同的 START AFTER(),您可以让它每小时运行一次,或每两小时运行一次。
【讨论】:
我认为你不需要修改你的伪对话方法来实现你所需要的。只需为仅向终端设备发出发送映射(或 TC 写入)的小程序发出带有一秒延迟的 EXEC CICS START 命令(只需执行一次)。理想情况下,在屏幕上保留一个公共区域,以便所有交易都可以使用一个公共程序。在某些时候,当不再需要更新时,取消 START 请求。在我看来,计时器更新事务将与用户发起的事务流很好地混合。如果启动计时器弹出时用户事务处于活动状态,则计时器更新程序将延迟一点。
虽然这应该可行,但您需要记住,您每小时可能会为每位用户推动 3,600 笔交易。这个功能真的值得吗?
【讨论】:
这在使用地图的标准 CICS 中是不可能的。 3270 协议不适合不断更新屏幕。大多数自动更新屏幕(例如控制台和监控显示)都使用本地 VTAM 方法,构建自己的数据流。
使用未格式化的数据也许可以做到这一点,但我不建议在 CICS 中这样做。伪对话式 CICS 在屏幕显示期间没有程序可以控制,非常不鼓励使用对话式编程。
【讨论】:
您无法在 CICS 中真正做到这一点,CICS 充其量是为伪交互式响应而设计的。它设计用于向您的终端发送整个页面或屏幕的大型机,程序读取接收到的屏幕(其中有一些用户将更新的字段,如果您没有更改它们,终端不会发回数据) 然后,CICS 事务占据了包含更改的屏幕的一部分,将响应发送回并退出。
这使得数据输入和查询程序非常高效。但是要意识到,当程序处理完屏幕后,它就退出了,它消失了,甚至不再在内存中,所有的资源都被回收了。这允许公司运行一个有 300 个终端和可能 10 兆实际内存的大型机,因为当程序等待你响应时,它根本不使用任何资源,如果有 200 人运行数据输入程序,他们正在运行一个可重入程序,其中所有 200 人都在运行同一个程序的相同副本,他们唯一使用的可能是每个用户 1K 的可写存储空间,用于必须读取屏幕或文件的部分记录并做一些计算。想想看,200 个人在运行同一个程序,而他们同时都在使用一个模块,该模块为应用程序使用 20K 内存——每个人都使用相同的 20K 内存——每个实际读取 1K/写入数据。
想一想,第一个启动该数据输入程序的用户使用 20K 的内存用于应用程序,外加 1K 用于可写数据。之后在该程序上处理的每个用户使用额外的 1K 内存,仅此而已。当他们坐在那里看着终端时,他们可能只使用表格中的 4 个字节来告诉系统有一个终端连接。根本没有使用任何资源。
能够定期更新屏幕意味着某些东西必须保持运行,这不是 CICS 做得很好的事情。 CICS 不打算像 PC 那样用于交互式处理,因为您实际上是在 PC 上实时运行。
【讨论】:
EXEC CICS ASK TIME END-EXEC 更新时间戳。 EXEC CICS SEND MAP DATA ONLY END-EXEC 更新屏幕。
但是,使用建议的 EXEC CICS START TRANSID ('name' | namefld) 延迟时间) 结束执行。 实际上是更好的方法。
【讨论】: