我有两个问题首先是主要问题。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 事务已经占据了包含更改的屏幕的一部分,发送回响应并退出。
这使得数据输入和查询程序非常有效。但是要意识到,当程序处理完屏幕后,它就退出了,它消失了,甚至不再在内存中,所有的资源都被回收了。这允许公司运行一个有 300 个终端和可能 10 兆实际内存的大型机,因为当程序等待你响应时,它根本不使用任何资源,如果有 200 人运行数据输入程序,他们正在运行一个可重入程序,其中所有 200 人都在运行同一个程序的相同副本,他们唯一使用的可能是每个用户 1K 的可写存储空间,用于必须读取屏幕或文件的部分记录并做一些计算。想想看,有 200 个人在运行同一个程序,而且他们所有人同时,
想一想,第一个启动该数据输入程序的用户使用 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) DELAY (time) END-EXEC。实际上是更好的方法。