下图显示了从动态访问模块(DMOD)接收消息的方法。
使用路由过程接收消息
DMOD 初始化后,3270 模拟器通过调用 sepdrout 注册路由过程。 当 DMOD 收到消息时,它会调用 3270 模拟器路由过程,然后该过程可以处理该消息。
使用此方法时,DMOD 线程和 3270 模拟器线程之间没有上下文切换。 路由过程必须快速将控制权交还给 DMOD。 例如,它无法暂停等待键盘输入。
应用程序必须确定收到的消息是针对此应用程序还是另一个应用程序。 如果消息不用于此应用程序,则路由过程必须返回,指示未处理该消息。 如果应用程序处理消息,则它负责在处理完成后释放缓冲区。
在某些情况下,路由过程可以将消息处理直到完成。 另一种方法是路由过程将消息置于应用程序队列中,然后清除应用程序信号灯。 然后,应用程序可以处理消息。
通过向本地节点发送 状态-资源 消息(返回本地节点的信用额度,以便在收到消息时从路由过程发送进一步数据),而不是等待消息完成,从而进一步提高性能。 此示例 代码:初始化和路由过程说明了此用法。 有关信贷和流量控制的更多信息,请参阅节奏控制和分块处理。
应用程序收到消息后,应用程序负责接收消息的缓冲区。 应用程序必须重复使用缓冲区来发送消息(使用 sbpusend)或释放它(使用 sepdburl)。 如果要重用的缓冲区不包含要发送的消息的正确元素数,则应用程序可以获取其他元素(使用 sbpibegt)或释放现有元素(使用 sbpiberl)。 在这种情况下,应用程序还必须确保缓冲区标头中的 numelts 字段指示正确的元素数。